ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBmYTZjODg0Li5iNzdlZWM3IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDMgKzEsMTM1NCBAQAorY29tbWl0IGM0NDBiZmU2ZDZkOTJkNjY0NzhhN2U4NDQwMmIzMWY0ODQxMzYxN2IKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZToJV2VkIEp1biA2IDExOjQyOjEzIDIwMDcgKzAyMDAKKworICAgIHBwYzR4eDogQWRkIE5BTkQgYm9vdGluZyBzdXBwb3J0IGZvciBBTUNDIEFjYWRpYSAoNDA1RVopIGV2YWwgYm9hcmQKKworICAgIFRoaXMgcGF0Y2ggYWRkcyBOQU5EIGJvb3Rpbmcgc3VwcG9ydCBmb3IgdGhlIEFNQ0MgQWNhZGlhIGV2YWwgYm9hcmQuCisKKyAgICBQbGVhc2UgbWFrZSBzdXJlIHRvIGNvbmZpZ3VyZSBqdW1wZXIgSjcgdG8gcG9zaXRpb24gMi0zIHdoZW4gYm9vdGluZworICAgIGZyb20gTk9SLCBhbmQgdG8gcG9zaXRpb24gMS0yIHdoZW4gYm9vdGluZyBmb3IgTkFORC4KKworICAgIEkgYWxzbyBhZGRlZCBhIGJvYXJkIGNvbW1hbmQgdG8gY29uZmlndXJlIHRoZSBJMkMgYm9vdHN0cmFwIEVFUFJPTQorICAgIHZhbHVlcy4gUmlnaHQgbm93IG9ubHkgMjY3TUh6IGlzIHN1cHBvcnQgZm9yIGJvb3RpbmcgZWl0aGVyIHZpYSBOT1IKKyAgICBvciBOQU5EIEZMQVNILiBIZXJlIHRoZSB1c2FnZToKKworICAgID0+IGJvb3RzdHJhcCAyNjcgbm9yCTt0byBjb25maWd1cmUgdGhlIGJvYXJkIGZvciAyNjdNSHogTk9SIGJvb3RpbmcKKyAgICA9PiBib290c3RyYXAgMjY3IG5hbmQJO3RvIGNvbmZpZ3VyZSB0aGUgYm9hcmQgZm9yIDI2N01IeiBOTkFORCBib290aW5nCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCAzMjkyMmNkYzQ3MGZkZmQzOWJlYTBjMWM0ZjU4MmQzZmIzNDA0MjFlCitBdXRob3I6IEVkIFN3YXJ0aG91dCA8RWQuU3dhcnRob3V0QGZyZWVzY2FsZS5jb20+CitEYXRlOglUdWUgSnVuIDUgMTI6MzA6NTIgMjAwNyAtMDUwMAorCisgICAgbXBjODY0MSBpbWFnZSBzaXplIGNsZWFudXAKKworICAgIGU2MDAgZG9lcyBub3QgaGF2ZSBhIGJvb3RwZyByZXN0cmljdGlvbi4KKyAgICBNb3ZlIHRoZSB2ZXJzaW9uIHN0cmluZyB0byBiZWdpbm5pbmcgb2YgaW1hZ2UgYXQgZmZmMDAwMDAuCisgICAgUmVzZXR2ZWMuUyBpcyBub3QgbmVlZGVkLgorICAgIFVwZGF0ZSBmbGFzaCBjb3B5IGluc3RydWN0aW9ucy4KKyAgICBBZGQgdGZ0cGZsYXNoIGVudiB2YXJpYWJsZQorCisgICAgU2lnbmVkLW9mZi1ieTogRWQgU3dhcnRob3V0IDxFZC5Td2FydGhvdXRAZnJlZXNjYWxlLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorCitjb21taXQgZTNjYmUxZjkzYzU3MjJmOGViYmFkNDY4ZTMwYzA2OWEyYjUxMTA5NworQXV0aG9yOiBCZW5vw650IE1vbmluIDxibW9uaW5AYWRlbmVvLmV1PgorRGF0ZToJTW9uIEp1biA0IDA4OjM2OjA1IDIwMDcgKzAyMDAKKworICAgIFtQQVRDSF0gRml4IHBwYzR4eCBib290c3RyYXAgbGV0dGVyIGRpc3BsYXllZCBvbiBzdGFydHVwCisKKyAgICBUaGUgYXR0YWNoZWQgcGF0Y2ggaXMgbWFpbmx5IGNvc21ldGljLCBhbGxvd2luZyB1LWJvb3QgdG8KKyAgICBkaXNwbGF5IHRoZSBjb3JyZWN0IGJvb3RzdHJhcCBvcHRpb24gbGV0dGVyIGFjY29yZGluZyB0byB0aGUKKyAgICBkYXRhc2hlZXRzLgorCisgICAgVGhlIG9yaWdpbmFsIHBhdGNoIHdhcyBleHRlbmRlZCB3aXRoIDQwNUVaIHN1cHBvcnQgYnkgU3RlZmFuCisgICAgUm9lc2UuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBCZW5vaXQgTW9uaW4gPGJtb25pbkBhZGVuZW8uZXU+CisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgMThkMTU2ZWIzN2M5MGZhZGM4ZWM3YTgxYTNiODkxNzYxNjFmODViNworQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CitEYXRlOglGcmkgSnVuIDEgMTY6MTg6MTcgMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBBZGQgbWlzc2luZyBmaWxlIGZvciBCYW1ib28gTkFORCBib290aW5nIHN1cHBvcnQKKworICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IDE1NWE5NjQ3OGEwODgxZTZkYTk2Y2JiYmNmMzQ5NTJkNmEzYjFiNGIKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZToJRnJpIEp1biAxIDE1OjU4OjE5IDIwMDcgKzAyMDAKKworICAgIHBwYzR4eDogVW5kbyBTZXF1b2lhIHBhdGNoIGZvciBkeW5hbWljIEVCQyBzcGVlZCBzdXBwb3J0IG9mIDgzTUh6CisKKyAgICBUaGlzIHBhdGNoIHVuZG9lcyB0aGUgcGF0Y2ggYnkgSmVmZiBNYW5uIHdpdGggY29tbWl0LWlkIGFkYTQ2OTdkLiBBcworICAgIHN1Z2dlc3RlZCBieSBBTUNDIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBkeW5hbWljYWxseSBjaGFuZ2UgdGhlIEVCQworICAgIHNwZWVkIGFmdGVyIGJvb3R1cC4gU28gd2UgdW5kbyB0aGlzIGNoYW5nZSB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLgorCisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgOWQ5MDk2MDQzZThmNzEzZDRiZjE3NDNkMzJlMTQ1OWU2YTExNjQ0YgorQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CitEYXRlOglGcmkgSnVuIDEgMTU6Mjk6MDQgMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBVcGRhdGUgU2VxdW9pYSBOQU5EIGJvb3Rpbmcgc3VwcG9ydCB3aXRoIEVDQworCisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgY2Y5NTljN2Q2Njg3NTY3YzMwOGUzNjZlOTU4MWUxYTVhZmY1Y2M1YgorQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CitEYXRlOglGcmkgSnVuIDEgMTU6Mjc6MTEgMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBBZGQgTkFORCBib290aW5nIHN1cHBvcnQgZm9yIEFNQ0MgQmFtYm9vICg0NDBFUCkgZXZhbCBib2FyZAorCisgICAgVGhpcyBwYXRjaCBhZGRzIE5BTkQgYm9vdGluZyBzdXBwb3J0IGZvciB0aGUgQU1DQyBCYW1ib28gZXZhbCBib2FyZC4KKyAgICBTaW5jZSB0aGUgTkFORC1TUEwgYm9vdCBpbWFnZSBpcyBsaW1pdGVkIHRvIDRrYnl0ZXMsIHRoaXMgdmVyc2lvbgorICAgIG9ubHkgc3VwcG9ydHMgdGhlIG9uYm9hcmQgNjRNQnl0ZXMgb2YgRERSLiBUaGUgRElNTSBtb2R1bGVzIGNhbid0IGJlCisgICAgc3VwcG9ydGVkLCBzaW5jZSB0aGUgc2V0dXAgY29kZSBmb3IgSTJDIERJTU0gYXV0b2RldGVjdGlvbiBhbmQKKyAgICBjb25maWd1cmF0aW9uIGlzIHRvbyBiaWcgZm9yIHRoaXMgTkFORCBib290bG9hZGVyLgorCisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgNDJiZTU2ZjUzYzhiMTA3ODY4ZTYxMjVjODUyNGFlODQyOTNlOTVhNworQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CitEYXRlOglGcmkgSnVuIDEgMTU6MjM6MDQgMjAwNyArMDIwMAorCisgICAgTkFORDogQWRkIEVDQyBzdXBwb3J0IHRvIE5BTkQgYm9vdGluZyBzdXBwb3J0IGluIG5hbmRfc3BsL25hbmRfYm9vdC5jCisKKyAgICBUaGUgVS1Cb290IE5BTkQgYm9vdGluZyBzdXBwb3J0IGlzIG5vdyBleHRlbmRlZCB0byBzdXBwb3J0IEVDQworICAgIHVwb24gbG9hZGluZyBvZiB0aGUgTkFORCBVLUJvb3QgaW1hZ2UuCisKKyAgICBUZXN0ZWQgb24gQU1DQyBTZXF1b2lhICg0NDBFUHgpIGFuZCBCYW1ib28gKDQ0MEVQKS4KKworICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IGE0NzFkYjA3ZmJiNjVhODQxZmZjOWY0ZjExMjU2MmI5NDUyMzBmOTgKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZToJRnJpIEp1biAxIDE1OjE5OjI5IDIwMDcgKzAyMDAKKworICAgIHBwYzR4eDogUHJlcGFyZSBCYW1ib28gcG9ydCBmb3IgTkFORCBib290aW5nIHN1cHBvcnQKKworICAgIFRoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgIm5vcm1hbCIgQmFtYm9vIE5PUiBib290aW5nIHBvcnQsIHNvCisgICAgdGhhdCBpdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGNvbWluZyBzb29uIE5BTkQgYm9vdGluZworICAgIEJhbWJvbyBwb3J0LgorCisgICAgSXQgYWxzbyBlbmFibGVzIHRoZSAybmQgTkFORCBmbGFzaCBvbiB0aGUgQmFtYm9vLgorCisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgNTNhZDAyMTAzZmI4YmU0MTM4YTk5MzdhOGFiOTFmY2RmZjdiNDk4NworQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CitEYXRlOglGcmkgSnVuIDEgMTU6MTY6NTggMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBVcGRhdGUgaW5fYmUzMigpIGZ1bmN0aW9ucyBhbmQgZnJpZW5kcyB0byBsYXRlc3QgTGludXggdmVyc2lvbgorCisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgOTFkYTA5Y2ZiY2UwYzFkZTA1ZDZkODRhYTgzNjNkNjY2ZmE3ZWEzYworQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CitEYXRlOglGcmkgSnVuIDEgMTU6MTU6MTIgMjAwNyArMDIwMAorCisgICAgTkFORDogQWRkIGhhcmR3YXJlIEVDQyBzdXBwb3J0IHRvIHRoZSBQUEM0eHggTkFORCBkcml2ZXIgbmRmYy5jCisKKyAgICBUaGlzIHBhdGNoIGFkZHMgaGFyZHdhcmUgRUNDIHN1cHBvcnQgdG8gdGhlIE5ERkMgZHJpdmVyLiBJdCBhbHNvCisgICAgY2hhbmdlcyB0aGUgcmVnaXN0ZXIgYWNjZXNzIGZyb20gdXNpbmcgdGhlICJzaW1wbGUiIGluMzIvb3V0MzIKKyAgICBmdW5jdGlvbnMgdG8gdGhlIGluX2JlMzIvb3V0X2JlMzIgZnVuY3Rpb25zLCB3aGljaCBtYWtlIHN1cmUKKyAgICB0aGF0IHRoZSBhY2Nlc3MgaXMgY29ycmVjdGx5IHN5bmNlZC4gVGhpcyBpcyB0aGUgb25seSByZWNvbW1lbmRlZAorICAgIGFjY2VzcyB0byBTb0MgcmVnaXN0ZXJzIGluIHRoZSBjdXJyZW50IExpbnV4IGtlcm5lbC4KKworICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IDE3YjVlODYyMjg3Y2NhNzZmMTlkY2Y4Yjc0MWU2MWE3ZDA2NjE3ZjIKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZToJRnJpIEp1biAxIDE1OjEyOjE1IDIwMDcgKzAyMDAKKworICAgIE5BTkQ6IFVwZGF0ZSBuYW5kX2VjYy5jIHRvIGxhdGVzdCBMaW51eCB2ZXJzaW9uCisKKyAgICBUaGlzIHBhdGNoIHVwZGF0ZXMgdGhlIG5hbmRfZWNjIGNvZGUgdG8gdGhlIGxhdGVzdCBMaW51eCB2ZXJzaW9uLgorICAgIFRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGUgbW9yZSBjb21wYWN0IGNvZGUuIFRoaXMgbWFrZXMKKyAgICBpdCBwb3NzaWJsZSB0byBpbmNsdWRlIHRoZSBFQ0MgY29kZSBpbnRvIHRoZSBOQU5EIGJvb3Rsb2FkZXIKKyAgICBpbWFnZSAoTkFORF9TUEwpIGZvciBQUEM0eHguCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCBkMmQ0MzI3NjBkMjE5OWQwZTg1NThmZGQ5ZDE3ODliODEzMWFiY2Y3CitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CUZyaSBKdW4gMSAxNTowOTo1MCAyMDA3ICswMjAwCisKKyAgICBwcGM0eHg6IDQ0eCBERFIgZHJpdmVyIGNvZGUgY2xlYW51cCBhbmQgc21hbGwgZml4IGZvciBCYW1ib28KKworICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IGU0YmJlZDI4MDNhMmFkMDUyMWM3MzYyZjVkM2UwNjVmOTlhYmFlZGMKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZToJRnJpIEp1biAxIDEzOjQ1OjI0IDIwMDcgKzAyMDAKKworICAgIHBwYzR4eDogQ2hhbmdlIEx1YW4gY29uZmlnIGZpbGUgdG8gc3VwcG9ydCBFQ0MKKworICAgIFdpdGggdGhlIHVwZGF0ZWQgNDR4IEREUjIgZHJpdmVyIHRoZSBMdWFuIGJvYXJkIG5vdyBzdXBwb3J0cworICAgIEVDQyBnZW5lcmF0aW9uIGFuZCBjaGVja2luZy4KKworICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IDcxODdkYjczNDkxYzhkZTBmYjU2ZWZiNWU1MTM0YmE1ZWM0NDMwODkKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZToJRnJpIEp1biAxIDEzOjQ1OjAwIDIwMDcgKzAyMDAKKworICAgIHBwYzR4eDogVXBkYXRlIDQ0eF9zcGRfZGRyMiBjb2RlICg0NDBTUC80NDBTUGUpCisKKyAgICBBZGQgY29uZmlnIG9wdGlvbiBmb3IgMTgwIGRlZ3JlZSBhZHZhbmNlIGNsb2NrIGNvbnRyb2wgYXMgbmVlZGVkCisgICAgZm9yIHRoZSBBTUNDIEx1YW4gZXZhbCBib2FyZC4KKworICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IGVlMTUyOTgzOGFiYmZhYTM1ZjE0ZTNmZmJlYWFiYTY5MzE1OTQ3NWYKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CVRodSBNYXkgMzEgMTc6MjA6MDkgMjAwNyArMDIwMAorCisgICAgQWRkIHN1cHBvcnQgZm9yIFNUWCBHUDNTU0EgKHN0eHNzYSkgQm9hcmQgd2l0aCA0IE1pQiBmbGFzaC4KKworICAgIFNpZ25lZC1vZmYtYnk6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CisKK2NvbW1pdCA3MDQ5Mjg4ZmIxZjE2ZjFiMzE3MTQwMjI2Y2RlYmQwN2JkNDE2Mzk1CitBdXRob3I6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CitEYXRlOglTdW4gTWF5IDI3IDE3OjI2OjQ2IDIwMDcgKzAyMDAKKworICAgIE1vdGlvbi1QUk86IENvZGUgY2xlYW51cCwgZml4IG9mIGEgdHlwbyBpbiBPRl9TVERPVVRfUEFUSC4KKworICAgIFNpZ25lZC1vZmYtYnk6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CisKK2NvbW1pdCA0NTIwZmQ0ZDJjNDUwZGE0OTYzNzIxNmFhMGU1MzczOWI2MWM2MGFjCitBdXRob3I6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CitEYXRlOglTdW4gTWF5IDI3IDE3OjA2OjM2IDIwMDcgKzAyMDAKKworICAgIE1vdGlvbi1QUk86IEFkZCBzdXBwb3J0IGZvciByZWR1bmRhbnQgZW52aXJvbm1lbnQuCisKKyAgICBFbmFibGUgcmVkdW5kYW50IGVudmlyb25tZW50LCBhZGQgYSBNVEQgcGFydGl0aW9uIGZvciBpdDsgYWxzbyBhZGQgZW52LgorICAgIHZhcmlhYmxlIGNvbW1hbmQgZm9yIHBhc3NpbmcgTVREIHBhcnRpdGlvbnMgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBQaW90ciBLcnVzenluc2tpIDxwcGtAc2VtaWhhbGYuY29tPgorICAgIEFja2VkLWJ5OiBCYXJ0bG9taWVqIFNpZWthIDx0dXJAc2VtaWhhbGYuY29tPgorCitjb21taXQgYTI2ZWFiZWVjMzE3NDZmMDZkMzA5MTAzNjkwODkyODA1Njk2ZTM0NAorQXV0aG9yOiBCYXJ0bG9taWVqIFNpZWthIDx0dXJAc2VtaWhhbGYuY29tPgorRGF0ZToJU3VuIE1heSAyNyAxNzowNToxMSAyMDA3ICswMjAwCisKKyAgICBNb3Rpb24tUFJPOiBDaGFuZ2UgbWF4aW11bSBjb25zb2xlIGJ1ZmZlciBzaXplIGZyb20gMjU2IHRvIDEwMjQgYnl0ZXMuCisKKyAgICBBbGxvdyBwYXNzaW5nIGxvbmdlciBjb21tYW5kIGxpbmUgdG8gdGhlIGtlcm5lbCAtIHVzZWZ1bCBlc3BlY2lhbGx5CisgICAgZm9yIHBhc3NpbmcgTVREIHBhcnRpdGlvbiBsYXlvdXQuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBQaW90ciBLcnVzenluc2tpIDxwcGtAc2VtaWhhbGYuY29tPgorICAgIEFja2VkLWJ5OiBCYXJ0bG9taWVqIFNpZWthIDx0dXJAc2VtaWhhbGYuY29tPgorCitjb21taXQgOTE2MGI5NmY3MTQ4M2ExMTZkZTgxYzY4OTg1ZThlZTMwNmQzNjc2NAorQXV0aG9yOiBCYXJ0bG9taWVqIFNpZWthIDx0dXJAc2VtaWhhbGYuY29tPgorRGF0ZToJU3VuIE1heSAyNyAxNzowNDoxOCAyMDA3ICswMjAwCisKKyAgICBGaXg6IEFkZCBtaXNzaW5nIE5VTEwgdGVybWluYXRpb24gaW4gc3RyaW5ncyBleHBhbmRlZCBieSBtYWNyb3MgcGFyc2VyLgorCisgICAgU2lnbmVkLW9mZi1ieTogUGlvdHIgS3J1c3p5bnNraSA8cHBrQHNlbWloYWxmLmNvbT4KKyAgICBBY2tlZC1ieTogQmFydGxvbWllaiBTaWVrYSA8dHVyQHNlbWloYWxmLmNvbT4KKworY29tbWl0IDYzMGVjODRhZWY3MjI4ZmMxZGJmYjM4ZGVjNzg1NDE0MDNhNzg2Y2QKK0F1dGhvcjogQmFydGxvbWllaiBTaWVrYSA8dHVyQHNlbWloYWxmLmNvbT4KK0RhdGU6CVN1biBNYXkgMjcgMTc6MDM6MzcgMjAwNyArMDIwMAorCisgICAgTW90aW9uLVBSTzogVXBkYXRlIEVFUFJPTSdzIHBhZ2Ugd3JpdGUgYml0cyBhbmQgd3JpdGUgZGVsYXkuCisKKyAgICBDaGFuZ2UgRUVQUk9NIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBkYXRhc2hlZXQ6ICJUaGUgMjRDMDFBIGFuZCAyNEMwMkEKKyAgICBoYXZlIGEgcGFnZSB3cml0ZSBjYXBhYmlsaXR5IG9mIHR3byBieXRlcyIsIGFuZCAiVGhpcyBkZXZpY2Ugb2ZmZXJzIGZhc3QgKDFtcykKKyAgICBieXRlIHdyaXRlIi4gQWRkIDNtcyBvZiBleHRyYSBkZWxheS4KKworICAgIFNpZ25lZC1vZmYtYnk6IFBpb3RyIEtydXN6eW5za2kgPHBwa0BzZW1paGFsZi5jb20+CisgICAgQWNrZWQtYnk6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CisKK2NvbW1pdCBjMDAxMjVlMDdjMWViYzEyNWJhYjQwZTFlMThiY2VlZDhiZTBjMTYyCitBdXRob3I6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CitEYXRlOglTdW4gTWF5IDI3IDE2OjU4OjQ1IDIwMDcgKzAyMDAKKworICAgIE1QQzVYWFgsIE1vdGlvbi1QUk86IEZpeCBQSFkgaW5pdGlhbGl6YXRpb24gcHJvYmxlbS4KKworICAgIEFmdGVyIGJlaW5nIHJlc2V0IGluIG1wYzV4eHhfZmVjX2luaXRfcGh5KCksIFBIWSBnb2VzIGludG8gRlggbW9kZSwgaW4gd2hpY2gKKyAgICBuZXR3b3JraW5nIGRvZXMgbm90IGZ1bmN0aW9uLiBUaGlzIGNvbW1pdCBzd2l0Y2hlcyBQSFkgdG8gVFggbW9kZSBieSBjbGVhcmluZworICAgIHRoZSBGWF9TRUwgYml0IG9mIE1vZGUgQ29udHJvbCBSZWdpc3Rlci4gSXQgYWxzbyByZXZlcnNlcyBjb21taXQKKyAgICAwMDg4NjFhMmYzZWYyYzA2Mjc0NGQ3MzM3ODdjN2U1MzBhMWI4NzYxLCBpLmUuLCBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLgorCisgICAgU2lnbmVkLW9mZi1ieTogR3J6ZWdvcnogQmVybmFja2kgPGdqYkBzZW1paGFsZi5jb20+CisgICAgQWNrZWQtYnk6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CisKK2NvbW1pdCA5M2I3OGY1MzRhNmU3MDhiNGNmMWE0ZmZiNGQ4NDM4YzY3YTAwN2RiCitBdXRob3I6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CitEYXRlOglTdW4gTWF5IDI3IDE2OjU3OjE1IDIwMDcgKzAyMDAKKworICAgIE1vdGlvbi1QUk86IEFkZCBzdXBwb3J0IGZvciB0aGUgdGVtcGVyYXR1cmUgc2Vuc29yLgorCisgICAgU2lnbmVkLW9mZi1ieTogUGlvdHIgS3J1c3p5bnNraSA8cHBrQHNlbWloYWxmLmNvbT4KKyAgICBBY2tlZC1ieTogQmFydGxvbWllaiBTaWVrYSA8dHVyQHNlbWloYWxmLmNvbT4KKworY29tbWl0IGM3NWU2Mzk2MzBjYzEzMmRjMTljZDFlY2RhNTkyMmMwZGIwYmZiYmEKK0F1dGhvcjogQmFydGxvbWllaiBTaWVrYSA8dHVyQHNlbWloYWxmLmNvbT4KK0RhdGU6CVN1biBNYXkgMjcgMTY6NTU6MjMgMjAwNyArMDIwMAorCisgICAgTW90aW9uLVBSTzogQWRkIGRpc3BsYXlpbmcgb2YgQ1BMRCByZXZpc2lvbiBpbmZvcm1hdGlvbiBkdXJpbmcgYm9vdC4KKworICAgIFNpZ25lZC1vZmYtYnk6IEphbiBXcm9iZWwgPHdyckBzZW1paGFsZi5jb20+CisgICAgQWNrZWQtYnk6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CisKK2NvbW1pdCBjOTk1MTJkNmJkMzk3M2YwMWNhMmZjNDg5NmQ4MjliNDZlNjhmMTUwCitBdXRob3I6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CitEYXRlOglTdW4gTWF5IDI3IDE2OjUzOjQzIDIwMDcgKzAyMDAKKworICAgIE1QQzV4eHg6IENoYW5nZSBuYW1lcyBvZiBkZWZpbmVzIHJlbGF0ZWQgdG8gSVBCIGFuZCBQQ0kgY2xvY2tzLgorCisgICAgQm90aCBDRkdfUENJU1BFRURfNjYgYW5kIENGR19JUEJTUEVFRF8xMzMgYXJlIG1pc25hbWVkLCBhcyBkZWZpbmluZworICAgIHRoZW0gZG9lcyBub3QgY2F1c2UgUENJIG9yIElQQiBjbG9ja3MgdG8gcnVuIGF0IHRoZSBzcGVjaWZpZWQgc3BlZWQuCisgICAgSW5zdGVhZCwgdGhleSBjb25maWd1cmUgZGl2aXNvcnMgdXNlZCB0byBjYWxjdWxhdGUgc2FpZCBjbG9ja3MuIFRoaXMKKyAgICBwYXRjaCByZW5hbWVzIHRoZSBkZWZpbmVzIGFjY29yZGluZyB0byB0aGVpciByZWFsIGZ1bmN0aW9uLgorCisgICAgU2lnbmVkLW9mZi1ieTogR3J6ZWdvcnogQmVybmFja2kgPGdqYkBzZW1paGFsZi5jb20+CisgICAgQWNrZWQtYnk6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CisKK2NvbW1pdCBhMTFjMGI4NWRjMzY2NGJiM2MxZTc4MTEzNzExODczMGM4ZjYxOWFiCitBdXRob3I6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CitEYXRlOglTdW4gTWF5IDI3IDE2OjUxOjQ4IDIwMDcgKzAyMDAKKworICAgIE1vdGlvbi1QUk86IEFkZCBMRUQgc3VwcG9ydC4KKworICAgIFNpZ25lZC1vZmYtYnk6IEphbiBXcm9iZWwgPHdyckBzZW1paGFsZi5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogTWFyaWFuIEJhbGFrb3dpY3ogPG04QHNlbWloYWxmLmNvbT4KKyAgICBBY2tlZC1ieTogQmFydGxvbWllaiBTaWVrYSA8dHVyQHNlbWloYWxmLmNvbT4KKworY29tbWl0IGQ3NTY4OTQ3MjJjODg4ZDA5YTlmYTFkZjgzMjM3NTM3NzJkM2RjY2UKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZToJVGh1IE1heSAyNCAwOTo0OTowMCAyMDA3ICswMjAwCisKKyAgICBwcGM0eHg6IEZpeCBzbWFsbCA0MDVFWiBPQ00gaW5pdGlsaXphdGlvbiBidWcgaW4gc3RhcnQuUworCisgICAgQXMgcG9pbnRlZCBvdXQgYnkgQnJ1Y2UgQWRsZXIgPGJydWNlLmFkbGVyQGFjbS5vcmc+IHRoaXMgcGF0Y2gKKyAgICBmaXhlcyBhIHNtYWxsIGJ1ZyBpbiB0aGUgNDA1RVogT0NNIGluaXRpYWxpemF0aW9uLiBUaGFua3MgZm9yCisgICAgc3BvdHRpbmcuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCA1ZDRhMTc5MDEzZDU5YTc2NDQ2NDYyZTFlYjBhOTY5ZmJhNjNlYjgxCitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CVRodSBNYXkgMjQgMDg6MjI6MDkgMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBVcGRhdGUgQU1DQyBBY2FkaWEgc3VwcG9ydCBmb3IgYm9hcmQgcmV2aXNpb24gMS4xCisKKyAgICBUaGlzIHBhdGNoIHVwZGF0ZXMgdGhlIEFjYWRpYSAoNDA1RVopIHN1cHBvcnQgZm9yIHRoZSBuZXcgMS4xIGJvYXJkCisgICAgcmV2aXNpb24uIEl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBOQU5EIEZMQVNIIHZpYSB0aGUgNHh4IE5ERkMuCisKKyAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBqdW1wZXIgSjcgbXVzdCBiZSBpbiBwb3NpdGlvbiAyLTMgZm9yIHRoaXMKKyAgICBOQU5EIHN1cHBvcnQuIFBvc2l0aW9uIDEtMiBpcyBmb3IgTkFORCBib290aW5nIG9ubHkuIE5BTkQgYm9vdGluZworICAgIHN1cHBvcnQgd2lsbCBmb2xsb3cgbGF0ZXIuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCA5ZjAwNzdhYmQ2OWY3YTdjNzU2YTkxNWI5NjEwMzczMDJiZTNlNmYyCitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CVR1ZSBNYXkgMjIgMTI6NDg6MDkgMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBVc2UgZG8geyAuLi4gfSB3aGlsZSAoMCkgZm9yIENQUiAmIFNEUiBhY2Nlc3MgbWFjcm9zCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCA2ZjNkZmMxMzlhODM4YjA4NDFjMTUxZWZlMDBhZDQ3ZGIyMzY2ZTc5CitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CVR1ZSBNYXkgMjIgMTI6NDY6MTAgMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBBZGQgNDA1IHN1cHBvcnQgdG8gNHh4IE5BTkQgZHJpdmVyIG5kZmMuYworCisgICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIDQwNSBQUEMncyB0byB0aGUgNHh4IE5BTkQgZHJpdmVyCisgICAgbmRmYy5jLiBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciB0aGUgbmV3IEFNQ0MgNDA1RVouCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCAxMDYwM2Q3Njc2NzQyNmJlODAzZGFkZDRmYjY4OGI5N2ViNjk0ODFjCitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CU1vbiBNYXkgMjEgMDc6NDE6MjIgMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBGaXggcHJvYmxlbSBpbiA0MDVFWiBPQ00gaW5pdGlhbGl6YXRpb24KKworICAgIEFzIHNwb3R0ZWQgYnkgQnJ1Y2UgQWRsZXIgdGhpcyBwYXRjaCBmaXhlcyBhbiBpbml0aWFsaXphdGlvbiBwcm9ibGVtCisgICAgZm9yIHRoZSA0MDVFWiBPQ00uCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCAzZTNiOTU2OTA2ZWJhOWU0YWQ3OTMxNTgxZWNlZGFhZDEwZWNjY2U4CitBdXRob3I6IFBldGVyIFBlYXJzZSA8cGV0ZXIucGVhcnNlQGFybS5jb20+CitEYXRlOglGcmkgTWF5IDE4IDE2OjQ3OjAzIDIwMDcgKzAxMDAKKworICAgIFJlZHVjZSBsaW5lIGxlbmd0aHMgdG8gODAgY2hhcmFjdGVycyBtYXguCisKK2NvbW1pdCA5M2VmNDVjOWRkZmRkOWZjMTdjNGU3NGJkOGUyZjI0NTY1ODBlYjcyCitBdXRob3I6IFBldGVyIFBlYXJzZSA8cGV0ZXIucGVhcnNlQGFybS5jb20+CitEYXRlOglGcmkgTWF5IDE4IDE0OjM0OjA3IDIwMDcgKzAxMDAKKworICAgIE1ha2VmaWxlIHBlcm1pc3Npb25zCisKK2NvbW1pdCAxNDQzYTMxNDU3ZDY4ZjdlOGYwYjk0MDNlOTgzMmVjMWU3OWRjNTlkCitBdXRob3I6IFBldGVyIFBlYXJzZSA8cGV0ZXIucGVhcnNlQGFybS5jb20+CitEYXRlOglGcmkgTWF5IDE4IDE0OjMzOjExIDIwMDcgKzAxMDAKKworICAgIE1ha2VmaWxlIHBlcm1pc3Npb25zCisKK2NvbW1pdCA3MDEyNGMyNjAyYWUyZDRjNWQzZGJhMDViNDgyZDkxNTQ4MjQyZGU4CitBdXRob3I6IFN0ZWZhbm8gQmFiaWMgPHNiYWJpY0BkZW54LmRlPgorRGF0ZToJV2VkIE1heSAxNiAxNDo0OToxMiAyMDA3ICswMjAwCisKKyAgICBGaXggY29tcGlsZSBwcm9ibGVtIGNhdXNlIG15IE1pY3JvYmxhemUgbWVyZ2UKKworICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbm8gQmFiaWMgPHNiYWJpY0BkZW54LmRlPgorCitjb21taXQgYWRhNDY5N2QwMjMwZDZkYTU1Mjg2Nzc3N2Y5OGE2N2VjM2JhMjU3OQorQXV0aG9yOiBKZWZmcmV5IE1hbm4gPG1hbm5qQGVtYmVkZGVkcGxhbmV0LmNvbT4KK0RhdGU6CVdlZCBNYXkgMTYgMTM6MjM6MTAgMjAwNyArMDIwMAorCisgICAgW1BBVENIXSBSdW4gbmV3IHNlcXVvaWEgYm9hcmRzIHdpdGggYW4gRUJDIHNwZWVkIG9mIDgzTUh6CisKKyAgICBCZWNhdXNlIHRoZSBTZXF1b2lhIGJvYXJkIGRvZXMgbm90IGJvb3Qgd2l0aCBhbiBFQkMgZmFzdGVyIHRoYW4gNjZNSHosCisgICAgdGhlIGNsb2NrIGRpdmlkZXIgYXJlIGNoYW5nZWQgYWZ0ZXIgdGhlIGluaXRpYWwgYm9vdCBwcm9jZXNzLgorCisgICAgVGhpcyBhbGxvd3MgZm9yIG1heGltdW0gY2xvY2tpbmcgc3BlZWRzICB0byBiZSBhY2hpZXZlZCBvbiBuZXdlciBib2FyZHMuCisgICAgU2VxdW9pYSBib2FyZHMgd2l0aCA2NjYuNjYgTUh6IHByb2Nlc3NvcnMgcmVxdWlyZSB0aGF0IHRoZSBFQkMgZGl2aWRlcgorICAgIGJlIHNldCB0byAzIGluIG9yZGVyIHRvIHN0YXJ0IHRoZSBpbml0aWFsIGJvb3QgcHJvY2VzcyBhdCBhIHNsb3dlciBFQkMKKyAgICBzcGVlZC4gQWZ0ZXIgdGhlIGluaXRpYWwgYm9vdCBwcm9jZXNzLCB0aGUgZGl2aWRlciBjYW4gYmUgc2V0IGJhY2sgdG8gMiwKKyAgICB3aGljaCB3aWxsIGNhdXNlIHRoZSBib2FyZHMgdG8gcnVuIGF0IDgzLjMzM01Iei4gVGhpcyBpcyBiYWNrd2FyZAorICAgIGNvbXBhdGlibGUgd2l0aCBib2FyZHMgd2l0aCA1MzMuMzMgTUh6IHByb2Nlc3NvcnMsIGFzIHRoZXNlIGJvYXJkcyB3aWxsCisgICAgYWxyZWFkeSBiZSBzZXQgd2l0aCBhbiBFQkMgZGl2aWRlciBvZiAyLgorCisgICAgU2lnbmVkLW9mZi1ieTogSmVmZnJleSBNYW5uIDxtYW5uakBlbWJlZGRlZHBsYW5ldC5jb20+CisKK2NvbW1pdCBhNzY3NmVhNzczMmYzYzU5NjgwNTA3OWZlZDdlNWM5ZmFjNjUyY2ZjCitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CitEYXRlOglXZWQgTWF5IDE2IDAxOjE2OjUzIDIwMDcgKzAyMDAKKworICAgIE1pbm9yIENvZGluZyBTdHlsZSBjbGVhbnVwLCB1cGRhdGUgQ0hBTkdFTE9HLgorCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworY29tbWl0IGQ2MmY2NGNjMjNhOTQwZWFmZTcxMmM3NzZiMzI0OWU0MTYwNzUzZDEKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CVdlZCBNYXkgMTYgMDA6MTM6MzMgMjAwNyArMDIwMAorCisgICAgQ29kaW5nIFN0eWxlIENsZWFudXAsIG5ldyBDSEFOR0VMT0cKKworY29tbWl0IDYxOTM2NjY3ZTg2YTI1MGFlMTJmZDJkYzE4OWQzNTg4ZjBhNTllMGIKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZToJRnJpIE1heSAxMSAxMjowMTo0OSAyMDA3ICswMjAwCisKKyAgICBwcGM0eHg6IEFkZCBtdGNwci9tZmNwciBhY2Nlc3MgbWFjcm9zCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCAzNDNjNDhiZDg0NjA2YzQwMjVjOGE3YzcyNjNmZGE0NjVkNmUyODRjCitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CUZyaSBNYXkgMTEgMTI6MDE6MDYgMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBTZXQgYmQtPmJpX3BjaV9idXNmcmVxIG9uIDQ0MEVQeC9HUnggdG9vCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCA3ZDk4YmE3NzBhN2VhZWZhMjljZTkyN2YzMWEwOTU2ZGY4NWJmNjUwCitBdXRob3I6IFBpb3RyIEtydXN6eW5za2kgPHBwa0BzZW1paGFsZi5jb20+CitEYXRlOglUaHUgTWF5IDEwIDE2OjU1OjUyIDIwMDcgKzAyMDAKKworICAgIFtNb3Rpb24tUFJPXSBBZGQgTVREIGFuZCBKRkZTMiBzdXBwb3J0LCBhbHNvIGFkZCBkZWZhdWx0IHBhcnRpdGlvbgorICAgIGRlZmluaXRpb24uCisKK2NvbW1pdCA2NWZiNmE2NzZlODIxZjk1NzBhMmEzNzZkYzIwNGJmNjExY2U1ZjgxCitBdXRob3I6IFBldGVyIFBlYXJzZSA8cGV0ZXIucGVhcnNlQGFybS5jb20+CitEYXRlOglXZWQgTWF5IDkgMTE6NDI6NDQgMjAwNyArMDEwMAorCisgICAgQWRkIHRoZSBib2FyZCBkaXJlY3RvcnkgZm9yIFNNTjQyCisKK2NvbW1pdCAxNjAxMzFiZjk2NTc4NTQxOTYyNmRmNmMzODg3MjlmZTBiNTk3OTkyCitBdXRob3I6IFBldGVyIFBlYXJzZSA8cGV0ZXIucGVhcnNlQGFybS5jb20+CitEYXRlOglXZWQgTWF5IDkgMTE6NDE6NTggMjAwNyArMDEwMAorCisgICAgQWRkIHRoZSBmaWxlcyBmb3IgdGhlIFNNTjQyIGJvYXJkCisKK2NvbW1pdCA1YzZkMmI1YTUwMGY4YzQ5NjcwZGU4OTEwMTUwYjc4YTQxZjc4MWZjCitBdXRob3I6IFBldGVyIFBlYXJzZSA8cGV0ZXIucGVhcnNlQGFybS5jb20+CitEYXRlOglXZWQgTWF5IDkgMTE6NDA6MzQgMjAwNyArMDEwMAorCisgICAgUmVtb3ZlIHRoZSBkZWxldGVkIGZpbGVzIGZvciB0aGUgU01ONDIgcGF0Y2gKKworY29tbWl0IGIwZDhmNWJmMGQyMTVhZGM5NDI0Y2IyMjhiMjQ4NGRiZjA3Zjc3NjEKK0F1dGhvcjogUGV0ZXIgUGVhcnNlIDxwZXRlci5wZWFyc2VAYXJtLmNvbT4KK0RhdGU6CVdlZCBNYXkgOSAxMTozNzo1NiAyMDA3ICswMTAwCisKKyAgICBOZXcgYm9hcmQgU01ONDIgYnJhbmNoCisKK2NvbW1pdCAyOWYzYmUwY2FmMDc5OWNhNmI4OWRmZDk4MjRjMTU2MTlhNTAwMDBmCitBdXRob3I6IFBldGVyIFBlYXJzZSA8cGV0ZXIucGVhcnNlQGFybS5jb20+CitEYXRlOglXZWQgTWF5IDkgMTA6MjQ6MzggMjAwNyArMDEwMAorCisgICAgTWFrZWZpbGUgcGVybWlzc2lvbnMKKworY29tbWl0IGI4NDI4OWI1OTU3MzFlODg1MWRmNDZlODkzODQ1Y2MxMzIyYzliOWIKK0F1dGhvcjogRWQgU3dhcnRob3V0IDxFZC5Td2FydGhvdXRAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CVR1ZSBNYXkgOCAxNDoxNzowNyAyMDA3IC0wNTAwCisKKyAgICA4NjQxaHBjbjogRml4IE1ha2VmaWxlIGFmdGVyIG1vdmluZyBwaXhpcyB0byBib2FyZC9mcmVlc2NhbGUuCisKKyAgICBUaGUgT0JKVFJFRSAhPSBTUkNUUkVFIGJ1aWxkIHNjZW5hcmlvIHdhcyBicm9rZW4uCisgICAgVGhpcyBmaXhlcyBpdC4KKworICAgIFNpZ25lZC1vZmYtYnk6IEVkIFN3YXJ0aG91dCA8RWQuU3dhcnRob3V0QGZyZWVzY2FsZS5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IGU2OWY2NmM2ZWJlODJiYmJkMWRhNzY2YmM0ZWRhNDBlYzdlZTVhZjEKK0F1dGhvcjogTWljaGFsIFNpbWVrIDxtb25zdHJAbW9uc3RyLmV1PgorRGF0ZToJVHVlIE1heSA4IDE1OjU3OjQzIDIwMDcgKzAyMDAKKworICAgIGFkZDogcmVhZGluZyBzcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzCisKK2NvbW1pdCAxYTUwZjE2NGJlYjA2NWYzNjBmYmRkYjc2MDI5NjA3ZDZiMDk5Njk4CitBdXRob3I6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KK0RhdGU6CVR1ZSBNYXkgOCAxNDo1Mjo1MiAyMDA3ICswMjAwCisKKyAgICBhZGQ6IE1pY3JvYmxhemUgVjUgZXhjZXB0aW9uIGhhbmRsaW5nCisKK2NvbW1pdCBhYjg3NGQ1MDQ3ZTVkMzBkYmMxZTUxN2ZmMjYwODNlZmZmYTk4ZWNiCitBdXRob3I6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KK0RhdGU6CVR1ZSBNYXkgOCAxNDozOToxMSAyMDA3ICswMjAwCisKKyAgICBhZGQ6IEZTTCBjb250cm9sIHJlYWQgYW5kIHdyaXRlCisKK2NvbW1pdCBkZTFkZTAyYTdjYmYwNWU2YjYzZTBkOGZmYzYyNGYxMjQ5M2Y2YmEzCitBdXRob3I6IFBpb3RyIEtydXN6eW5za2kgPHBwa0BzZW1paGFsZi5jb20+CitEYXRlOglUdWUgTWF5IDggMTM6MDU6NDQgMjAwNyArMDIwMAorCisgICAgW01vdGlvbi1QUk9dIEFkZCBzdXBwb3J0IGZvciBJMkMsIEVFUFJPTSBhbmQgUlRDLgorCitjb21taXQgZmE1YzJiYTEyM2IxYmY4ODQ1NWJmYzIxZGI1ZTc4NmNhMDQ1MDI5ZAorQXV0aG9yOiBCYXJ0bG9taWVqIFNpZWthIDx0dXJAc2VtaWhhbGYuY29tPgorRGF0ZToJVHVlIE1heSA4IDEwOjIzOjU2IDIwMDcgKzAyMDAKKworICAgIFtNb3Rpb24tUFJPXSBBZGQgQVRBIHN1cHBvcnQuIEFkZCBDRi1ib290aW5nIGNvbW1hbmRzIHRvIHRoZSBkZWZhdWx0CisgICAgZW52aXJvbm1lbnQuCisKK2NvbW1pdCAwNjI0MWQ1MGEzYWIxYjIwYTBiMDhiYWVlYWZmY2FhMjNhZTRiODM5CitBdXRob3I6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CitEYXRlOglUdWUgTWF5IDggMDk6Mzk6MTIgMjAwNyArMDIwMAorCisgICAgW01vdGlvbi1QUk9dIENoYW5nZSBJUEIgY2xvY2sgZnJlcXVlbmN5IGZyb20gNTBNSHogdG8gMTAwTUh6LiBUaGlzCisgICAgZWxpbWluYXRlcyBuZXR3b3JraW5nIHByb2JsZW1zIGluIExpbnV4ICh0aW1lb3V0cykuCisKK2NvbW1pdCAxZjEzNjljMzRiNjI5YmU5NDcwMjY4NGQ0MWQzZmRkZjBmNjE5M2U3CitBdXRob3I6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CitEYXRlOglUdWUgTWF5IDggMDk6MjE6NTcgMjAwNyArMDIwMAorCisgICAgW01vdGlvbi1QUk9dIEVuYWJsZSBGbGF0IERldmljZSBUcmVlIHN1cHBvcnQgYW5kIG1vZGlmeSBkZWZhdWx0IGVudmlyb25tZW50CisgICAgdG8gYWxsb3cgYm9vdGluZyBvZiBGRFQtZXhwZWN0aW5nIGtlcm5lbHMuCisKK2NvbW1pdCBmYjA1ZjZkYTM1ZWExYzE1YzU1M2FiZTZmMjNmNjU2YmYxOGRjNWRiCitBdXRob3I6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KK0RhdGU6CU1vbiBNYXkgNyAyMzo1ODozMSAyMDA3ICswMjAwCisKKyAgICBuZXc6IFVTRV9NU1JfSU5UUiBzdXBwb3J0CisKK2NvbW1pdCAwMDg4NjFhMmYzZWYyYzA2Mjc0NGQ3MzM3ODdjN2U1MzBhMWI4NzYxCitBdXRob3I6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CitEYXRlOglNb24gTWF5IDcgMjI6MzY6MTUgMjAwNyArMDIwMAorCisgICAgW01QQzV4eHhdIFRoZXJlIGFyZSBuZXR3b3JraW5nIHByb2JsZW1zIG9uIHRoZSBNb3Rpb24tUFJPIGJvYXJkIHdpdGgKKyAgICBjdXJyZW50IFBIWSBpbml0YWxpemF0aW9uIGNvZGUgKHRmdHAgdGltZW91dHMgYWxsIHRoZSB0aW1lKS4gVGhpcyBjb21taXQKKyAgICB0ZW1wb3JhcmlseSBkaXNhYmxlcyBQSFkgaW5pdGFsaXphdGlvbiBzZXF1ZW5jZSB0byBtYWtlIHRoZSBuZXR3b3JraW5nCisgICAgb3BlcmF0aW9uYWwsIHVudGlsIGEgZml4IGlzIGZvdW5kLgorCitjb21taXQgYWJjYTkwMTg2OWMzNzYwYjZjNWZlY2I4MjVkYjZjMWQ5MWE3OGE5MworQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJTW9uIE1heSA3IDIyOjEwOjM2IDIwMDcgKzAyMDAKKworICAgIEdldCByaWQgb2YgZHVwbGljYXRlZCBmaWxlIChzZWUgaW5jbHVkZS9jb25maWdzL3NiYzg1NjAuaCBpbnN0ZWFkKQorCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworY29tbWl0IDIwN2I3YjJjOWQ5NzUyZTBmNjQ3OGMzMGMyOWI3MDg3ZjZlNmNiYjYKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CU1vbiBNYXkgNyAyMjowNzowOCAyMDA3ICswMjAwCisKKyAgICBHZXQgcmlkIG9mIGR1cGxpY2F0ZWQgZmlsZSAoc2VlIGRvYy9SRUFETUUuU0JDODU2MCBpbnN0ZWFkKQorCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworY29tbWl0IGE3YmFjN2U5YjU3YmE5NDgwNTFiZWIxOWVjNWJlM2E3NWNlNzUzODMKK0F1dGhvcjogTWljaGFsIFNpbWVrIDxtb25zdHJAbW9uc3RyLmV1PgorRGF0ZToJTW9uIE1heSA3IDE5OjQzOjEwIDIwMDcgKzAyMDAKKworICAgIGZpeDogcmVhZCBhbmQgd3JpdGUgTVNSIC0gcmVwYWlyIG51bWJlciBvZiBwYXJhbWV0ZXJzCisKK2NvbW1pdCAxOTNiNGEzYmIzYWNhZGRmNzk4ZGE4ZGUwZGEwNWQ5NGJhODc3NGVlCitBdXRob3I6IEplZmZyZXkgTWFubiA8bWFubmpAZW1iZWRkZWRwbGFuZXQuY29tPgorRGF0ZToJTW9uIE1heSA3IDE5OjQyOjQ5IDIwMDcgKzAyMDAKKworICAgIFtQQVRDSF0gcHBjNHh4OiBGaXggQ09ORklHX1NZU19DTEtfRlJFUSBkZWZpbml0aW9uIGluIFNlcXVvaWEgY29uZmlnIGZpbGUKKworICAgIEEgJzMnIGdvdCBjdXQgb2ZmIGluIHRoZSBmb3JtYXR0aW5nIG9mIHRoZSBsYXN0IHBhdGNoIHRvIGF1dG9tYXRpY2FsbHkKKyAgICBjaGFuZ2UgdGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBzeXN0ZW0gY2xvY2sgb24gc2VxdW9pYSBib2FyZC4KKworICAgIFNpZ25lZC1vZmYtYnk6IEplZmZyZXkgTWFubiA8bWFubmpAZW1iZWRkZWRwbGFuZXQuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IDE5YmYxZmJhZDdmMTlkNWExMjBiZTliMWRhZjEzNmUwNTJmY2FiMzkKK0F1dGhvcjogTWljaGFsIFNpbWVrIDxtb25zdHJAbW9uc3RyLmV1PgorRGF0ZToJTW9uIE1heSA3IDE5OjMzOjUxIDIwMDcgKzAyMDAKKworICAgIG5ldzogZnNsIGludGVycnVwdCBzdXBwb3J0CisgICAgRlNMX0hhc19kYXRhIGlzIGNvbm5lY3RlZCB0byBJTlRDLgorCitjb21taXQgNzkyMDMyYmFhN2Q2MjVlMzRjOTgxYWI2ZGY1MjE5MTFiZDhkYzg2MQorQXV0aG9yOiBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CitEYXRlOglNb24gTWF5IDcgMTk6MzA6MTIgMjAwNyArMDIwMAorCisgICAgZml4OiBpbnRlcnJ1cHQgaGFuZGxlcgorICAgIHJlbW92ZSBhc20gY29kZQorCitjb21taXQgZjNmMDAxYTM0MWVmMTg1ZDBmMTM4NDFiZTViNWRjMzM5NWFhY2MzMQorQXV0aG9yOiBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CitEYXRlOglNb24gTWF5IDcgMTk6MjU6MDggMjAwNyArMDIwMAorCisgICAgZml4OiByZW1vdmUgYXNtIGNvZGUKKworY29tbWl0IGZiN2MyZGJlZjAyYzlmNmY4ZDdiMDRlYzRjMmJmYjkxNDE4YjljMDEKK0F1dGhvcjogTWljaGFsIFNpbWVrIDxtb25zdHJAbW9uc3RyLmV1PgorRGF0ZToJTW9uIE1heSA3IDE5OjEyOjQzIDIwMDcgKzAyMDAKKworICAgIGZpeDogY2xlYW4gaW50ZXJydXB0CisKK2NvbW1pdCA0MmVmZWQ2MTMwYzhmY2Y3ZGE4ODEzODViNTQyNzA2NWQyODAxNzU3CitBdXRob3I6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KK0RhdGU6CU1vbiBNYXkgNyAxNzoyMjoyNSAyMDA3ICswMjAwCisKKyAgICBmaXg6IGludGVycnVwdCBoYW5kbGVyIGZvciBtdWx0aXBsZSBzb3VyY2VzCisKK2NvbW1pdCA0OGZiZDNhNGNkYWJiZWJjMWRlYmQ3ZWVkNzNjMDBjMmNhZjkxNGY2CitBdXRob3I6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KK0RhdGU6CU1vbiBNYXkgNyAxNzoxMTowOSAyMDA3ICswMjAwCisKKyAgICBuZXc6IGFkZCB3cml0aW5nIHRvIG1zciByZWdpc3RlcgorCitjb21taXQgYWM0Y2Q1OWQ1OWM5YmYzZjg5Y2I3YTM0NGFiZjgxODRkNjc4ZjU2MgorQXV0aG9yOiBUaW11ciBUYWJpIDx0aW11ckBmcmVlc2NhbGUuY29tPgorRGF0ZToJU2F0IE1heSA1IDA4OjEyOjMwIDIwMDcgKzAyMDAKKworICAgIDV4eHg6IHdyaXRlIE1BQyBhZGRyZXNzIHRvIG1hYy1hZGRyZXNzIGFuZCBsb2NhbC1tYWMtYWRkcmVzcworCisgICAgU29tZSBkZXZpY2UgdHJlZXMgaGF2ZSBhIG1hYy1hZGRyZXNzIHByb3BlcnR5LCBzb21lIGhhdmUgbG9jYWwtbWFjLWFkZHJlc3MsCisgICAgYW5kIHNvbWUgaGF2ZSBib3RoLiAgVG8gc3VwcG9ydCBhbGwgb2YgdGhlc2UgZGV2aWNlIHRyZWVzLCBmdHBfY3B1X3NldHVwKCkKKyAgICBzaG91bGQgd3JpdGUgdGhlIE1BQyBhZGRyZXNzIHRvIG1hYy1hZGRyZXNzIGFuZCBsb2NhbC1tYWMtYWRkcmVzcywgaWYgdGhleQorICAgIGV4aXN0LgorCisgICAgU2lnbmVkLW9mZi1ieTogVGltdXIgVGFiaSA8dGltdXJAZnJlZXNjYWxlLmNvbT4KKyAgICBBY2tlZC1ieTogR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorCitjb21taXQgYTlkODdlMjcwN2RjYjI0OWY2YmI3ZjdmZjdlMDBhY2Q4Y2RhOWZkMgorQXV0aG9yOiBHcnplZ29yeiBXaWFuZWNraSA8Z3J6ZWdvcnoud2lhbmVja2lAZ21haWwuY29tPgorRGF0ZToJU3VuIEFwciAyOSAxNDowMTo1NCAyMDA3ICswMjAwCisKKyAgICBbUEFUQ0hdIFVzZSBQVlIgdG8gZGlzdGluZ3Vpc2ggTVBDNTIwMEIgZnJvbSBNUEM1MjAwIGluIGJvb3QgbWVzc2FnZQorCisgICAgTVBDNTIwMEIgc3lzdGVtcyBhcmUgaW5jb3JyZWN0bHkgcmVwb3J0ZWQgYXMgTVBDNTIwMCBpbiBVLUJvb3Qgc3RhcnQtdXAKKyAgICBtZXNzYWdlLiBVc2UgUFZSIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIHR3byB2YXJpYW50cywgYW5kIHByaW50IHByb3BlciBDUFUKKyAgICBpbmZvcm1hdGlvbi4KKworICAgIFNpZ25lZC1vZmYtYnk6IEdyemVnb3J6IFdpYW5lY2tpIDxncnplZ29yei53aWFuZWNraUBnbWFpbC5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogQmFydGxvbWllaiBTaWVrYSA8dHVyQHNlbWloYWxmLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CisKK2NvbW1pdCA0ZWM1YmQ1NWVkMWZmYTkxYTc3NGFmMjk4NzY5NjIxZjRmYmIxOGMxCitBdXRob3I6IExhZGlzbGF2IE1pY2hsIDxsYWRpc0BsaW51eC1taXBzLm9yZz4KK0RhdGU6CVdlZCBBcHIgMjUgMTY6MDE6MjYgMjAwNyArMDIwMAorCisgICAgW1BBVENIXSBzaW1wbGlmeSBzaWxlbnQgY29uc29sZQorCisgICAgU2lnbmVkLW9mZi1ieTogTGFkaXNsYXYgTWljaGwgPGxhZGlzQGxpbnV4LW1pcHMub3JnPgorICAgIEFja2VkLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCBiNzU5OGE0M2YyYjQyMWE3MTNkODEzNWU5OGE0MmMzN2Q5ZWI5ZGYwCitBdXRob3I6IFNlcmdlaSBTaHR5bHlvdiA8c3NodHlseW92QHJ1Lm12aXN0YS5jb20+CitEYXRlOglNb24gQXByIDIzIDE1OjMwOjM5IDIwMDcgKzAyMDAKKworICAgIFtQQVRDSF0gQXZvaWQgYXNzaWduaW5nIFBDSSByZXNvdXJjZXMgZnJvbSB6ZXJvIGFkZHJlc3MKKworICAgIElmIGEgUENJIElERSBjYXJkIGhhcHBlbnMgdG8gZ2V0IGEgemVybyBhZGRyZXNzIGFzc2lnbmVkIHRvIGl0LCB0aGUgTGludXggSURFCisgICAgY29yZSBjb21wbGFpbnMgYW5kIElERSBkcml2ZXJzIGZhaWxzIHRvIHdvcmsuICBBbHNvLCBhc3NpZ25pbmcgemVybyB0byBhIEJBUgorICAgIHdhcyBpbGxlZ2FsIGFjY29yZGluZyB0byBQQ0kgMi4xICh0aGUgbGF0ZXIgcmV2aXNpb25zIHNlZW0gdG8gaGF2ZSBleGNsdWRlZCB0aGUKKyAgICBzZW50ZW5jZSBhYm91dCAiMCIgYmVpbmcgY29uc2lkZXJlZCBhbiBpbnZhbGlkIGFkZHJlc3MpIC0tIHNvLCB1c2UgYSByZWFzb25hYmxlCisgICAgc3RhcnRpbmcgdmFsdWUgb2YgMHgxMDAwICh0aGF0J3Mgd2hhdCB0aGUgbW9zdCBMaW51eCBhcmNocyBhcmUgdXNpbmcpLgorCisgICAgQWx0ZXJuYXRpdmVseSwgb25lIG1pZ2h0IGhhdmUgZml4ZWQgdGhlIGNhbGxzIHRvIHBjaV9zZXRfcmVnaW9uKCkgaW5kaXZpZHVhbGx5CisgICAgKHNvbWUgY29kZSBldmVuIHNlZW1zIHRvIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGlzIGlzc3VlKSBidXQgdGhhdCB3b3VsZCBoYXZlCisgICAgYmVlbiBhIGxvdCBtb3JlIHdvcmsuIDotKQorCisgICAgU2lnbmVkLW9mZi1ieTogU2VyZ2VpIFNodHlseW92IDxzc2h0eWx5b3ZAcnUubXZpc3RhLmNvbT4KKyAgICBBY2tlZC1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgOWZmZDQ1MWFmZWIwOGU1YmU3ZGRhZTY4MDQ4N2VjOTYyYjJiY2EyNQorQXV0aG9yOiBKZWZmcmV5IE1hbm4gPG1hbm5qQGVtYmVkZGVkcGxhbmV0LmNvbT4KK0RhdGU6CU1vbiBBcHIgMjMgMTQ6MDA6MTEgMjAwNyArMDIwMAorCisgICAgW3BhdGNoXSBzZXRlbnYoLi4uKSBjYW4gZGVsZXRlIGVudmlyb25tZW50YWx2YXJpYWJsZXMKKworICAgIHVwZGF0ZSBzZXRlbnYoKSBmdW5jdGlvbiBzbyB0aGF0IGVudGVyaW5nIGEgTlVMTCB2YWx1ZSBmb3IgdGhlCisgICAgdmFyaWFibGUncyB2YWx1ZSB3aWxsIGRlbGV0ZSB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZQorCisgICAgU2lnbmVkLW9mZi1ieTogSmVmZnJleSBNYW5uIDxtYW5uakBlbWJlZGRlZHBsYW5ldC5jb20+CisgICAgQWNrZWQtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IGViZDBhMGFlMDVhNDQ3NjljNGUyNzQ1OGFkNGU5ZjM0MzgyNTA0NDMKK0F1dGhvcjogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorRGF0ZToJTW9uIEFwciAyMyAxMzo1NDoyNCAyMDA3ICswMjAwCisKKyAgICBbcGF0Y2hdIHVzZSB1bnNpZ25lZCBjaGFyIGluIHNtYzkxMTExIGRyaXZlciBmb3IgbWFjCisKKyAgICB0aGUgdl9tYWMgdmFyaWFibGUgaW4gdGhlIHNtYzkxMTExIGRyaXZlciBpcyBkZWNsYXJlZCBhcyBhIHNpZ25lZCBjaGFyIC4uLgorICAgIHRoaXMgY2F1c2VzIHByb2JsZW1zIHdoZW4gb25lIG9mIHRoZSBieXRlcyBpbiB0aGUgTUFDIGlzICJzaWduZWQiIGxpa2UgMHhFMAorICAgIGJlY2F1c2Ugd2hlbiBpdCBnZXRzIHByaW50ZWQgb3V0LCB5b3UgZ2V0IGEgZGlzcGxheSBsaWtlOgorICAgIDB4RkZGRkZGRTAgYW5kIHRoYXQncyBubyBnb29kCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CisKK2NvbW1pdCBmZmM1MGY5YmIxOTQzNDNjNjMwMzUxN2E1MTc3MDg0NTdhNWViNmI4CitBdXRob3I6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KK0RhdGU6CVNhdCBNYXkgNSAxODo1NDo0MiAyMDA3ICswMjAwCisKKyAgICBuZXc6IEZTTCBhbmQgTVNSIHN1cHBvcnQgIzIKKworY29tbWl0IGY3ZTJlMGViMDY2ODEzNjMwNWY3OGJiOWMyMWJlNzliNDhhMzQyNDcKK0F1dGhvcjogTWljaGFsIFNpbWVrIDxtb25zdHJAbW9uc3RyLmV1PgorRGF0ZToJU2F0IE1heSA1IDE4OjI3OjE2IDIwMDcgKzAyMDAKKworICAgIG5ldzogRlNMIGFuZCBNU1Igc3VwcG9ydAorCitjb21taXQgMmYxNTI3OGMyZWI5MTFjNjY4YjRmZTU2MjEzMGI3OGNmNTU0ZDEzOQorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJU2F0IE1heSA1IDE4OjIzOjExIDIwMDcgKzAyMDAKKworICAgIENvZGluZyBzdHlsa2UgY2xlYW51cDsgdXBkYXRlIENIQU5HRUxPRy4KKworICAgIFNpZ25lZC1vZmYtYnk6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CisKK2NvbW1pdCA4ODVlYzg5YjY0OGE4OTlhMmYzMjM5M2ZkM2ZmZDlmNzIzNGM0NDAyCitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CitEYXRlOglTYXQgTWF5IDUgMTg6MDU6MDIgMjAwNyArMDIwMAorCisgICAgQWRkIFNUWCBHUDMgU1NBIGJvYXJkIHRvIE1BS0VBTEwgc2NyaXB0OyB1cGRhdGUgQ0hBTkdFTE9HLgorCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworY29tbWl0IDU0OTk2NDViM2ZlMTdhNTQ4YWY5ZGZjNDc5Y2E2ZTI0NTVmMTc5YTIKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CVNhdCBNYXkgNSAxNzoxNTo1MCAyMDA3ICswMjAwCisKKyAgICBNYWtlICJmaWxlIiBjb21tYW5kIGhhcHB5IHdpdGggc29tZSBjb25maWcubWsgZmlsZXM7IHVwZGF0ZSBDSEFOR0VMT0cKKworY29tbWl0IGUzYjhjNzhiYzI0ODljMjdhZTAyMDk4NmVmMGVhY2E2ODQ4NjZjZWYKK0F1dGhvcjogSmVmZnJleSBNYW5uIDxtYW5uakBlbWJlZGRlZHBsYW5ldC5jb20+CitEYXRlOglTYXQgTWF5IDUgMDg6MzI6MTQgMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBEZXRlY3QgaWYgdGhlIHN5c2NsayBvbiBTZXF1b2lhIGlzIDMzIG9yIDMzLjMzMyBNSHoKKworICAgIFRoZSBBTUNDIFNlY3F1b2lhIGJvYXJkIGhhcyBiZWVuIGNoYW5nZWQgaW4gYSBuZXcgcmV2aXNpb24gZnJvbSB1c2luZyBhCisgICAgMzMuMDAwIE1IeiBjbG9jayB0byBhIDMzLjMzMyBNSHogc3lzdGVtIGNsb2NrLiBBIGJpdCBpbiB0aGUgQ1BMRAorICAgIGluZGljYXRlcyB0aGUgZGlmZmVyZW5jZS4gVGhpcyBwYXRjaCByZWFkcyB0aGF0IGJpdCBhbmQgdXNlcyB0aGUgY29ycmVjdAorICAgIGNsb2NrIHNwZWVkIGZvciB0aGUgYm9hcmQuIFRoaXMgY29kZSBpcyBiYWNrd2FyZCBjb21wYXRhYmxlIHdpbGwgYWxsCisgICAgcHJpb3IgYm9hcmRzLiBBbGwgcHJpb3IgYm9hcmRzIHdpbGwgYmUgcmVhZCBhcyAzMy4wMDAuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBKZWZmcmV5IE1hbm4gPG1hbm5qQGVtYmVkZGVkcGxhbmV0LmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCBmNTQ0ZmY2NjU2ZmNhMjYzZWQxZWJlMzk4OTliNmQ5NWRhNjdjOGI4CitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CVNhdCBNYXkgNSAwODoyOTowMSAyMDA3ICswMjAwCisKKyAgICBwcGM0eHg6IFNlcXVvaWE6IFJlbW92ZSBjcHUvcHBjNHh4L3NwZWVkLmMgZnJvbSBOQU5EIGJvb3RpbmcKKworICAgIFVzaW5nIGNwdS9wcGM0eHgvc3BlZWQuYyB0byBjYWxjdWxhdGUgdGhlIGJ1cyBmcmVxdWVuY3kgaXMgdG9vIGJpZworICAgIGZvciB0aGUgNGsgTkFORCBib290IGltYWdlIHNvIGRlZmluZSBidXNfZnJlcXVlbmN5IHRvIDEzM01IeiBoZXJlCisgICAgd2hpY2ggaXMgc2F2ZSBmb3IgdGhlIHJlZnJlc2ggY291bnRlciBzZXR1cC4KKworICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IGE3OTg4NjU5MDU5M2JhMWQ2NjdjODQwY2FhNDk0MGM2MTYzOWYxOGYKK0F1dGhvcjogVGhvbWFzIEtub2Jsb2NoIDxrbm9ibG9jaEBzaWVtZW5zLmNvbT4KK0RhdGU6CVNhdCBNYXkgNSAwNzowNDo0MiAyMDA3ICswMjAwCisKKyAgICBOQU5EOiBXcm9uZyBjYWxjdWxhdGlvbiBvZiBwYWdlIG51bWJlciBpbiBuYW5kX2Jsb2NrX2JhZCgpCisKKyAgICBJbiBjYXNlIHRoYXQgdGhlcmUgaXMgbm8gbWVtb3J5IGJhc2VkIGJhZCBibG9jayB0YWJsZSBhdmFpbGFibGUgdGhlCisgICAgZnVuY3Rpb24gbmFuZF9ibG9ja19jaGVja2JhZCgpIGluIGRyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMgd2lsbCBjYWxsCisgICAgbmFuZF9ibG9ja19iYWQoKSBkaXJlY3RseS4gV2hlbiBwYXJhbWV0ZXIgJ2dldGNoaXAnIGlzIHNldCB0byB6ZXJvLAorICAgIG5hbmRfYmxvY2tfYmFkKCkgd2lsbCBub3QgcmlnaHQgc2hpZnQgdGhlIG9mZnNldCB0byBjYWxjdWxhdGUgdGhlCisgICAgY29ycmVjdCBwYWdlIG51bWJlci4KKworICAgIFNpZ25lZC1vZmYtYnk6IFRob21hcyBLbm9ibG9jaCA8a25vYmxvY2hAc2llbWVucy5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgOTg3N2Q3ZGNkMWVlYmU2MWFhNWQ4YjhmZmU5YzA0OGVhNDI2ZTZmNgorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJRnJpIE1heSA0IDEwOjAyOjMzIDIwMDcgKzAyMDAKKworICAgIEZpeCBpbml0cmQgbGVuZ3RoIGNvcnJ1cHRpb24gaW4gYm9vdG0gY29tbWFuZC4KKworICAgIFdoZW4gdXNpbmcgRkRUIEltYWdlcywgdGhlIGxlbmd0aCBvZiBhbiBpbml0YWwgcmFtZGlzayB3YXMKKyAgICBvdmVyd3JpdHRlbiAoYnVnIGludHJvZHVjZWQgYnkgY29tbWl0IDg3YTQ0OWM4LCAyMiBBdWcgMjAwNikuCisKKyAgICBQYXRjaGVzIGJ5IFRpbXVyIFRhYmkgJiBKb2hucyBEYW5pZWwuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgMDY4YWFiNjYwYmMzOTEyYjkzMGJlNTU0MGU2YjNmM2ZkNmFkM2M5NgorQXV0aG9yOiBLaW0gUGhpbGxpcHMgPGtpbS5waGlsbGlwc0BmcmVlc2NhbGUuY29tPgorRGF0ZToJVGh1IE1heSAzIDE5OjQzOjUyIDIwMDcgLTA1MDAKKworICAgIG1wYzgzeHg6IGZpeCB0cml2aWFsIGVycm9yIGluIE1BS0VBTEwKKworICAgIFNpZ25lZC1vZmYtYnk6IEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCBjNjRhODlkNmNlODU4NGI5ZmM2NGY0ZTg1ZGE5ZWNhYzNjZmMyYzJhCitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CitEYXRlOglUaHUgTWF5IDMgMTY6MzQ6NDEgMjAwNyArMDIwMAorCisgICAgVXBkYXRlIGJvYXJkIGNvbmZpZ3VyYXRpb24gZm9yIFNUWCBHUDNTU0EgYm9hcmQ6CisKKyAgICBFbmFibGUgaHVzaCBzaGVsbCwgZW52aXJvbm1lbnQgaW4gZmxhc2ggcmF0aGVyIGluIEVFUFJPTSwKKyAgICBtb3JlIHVzZXItZnJpZW5kbHkgZGVmYXVsdCBlbnZpcm9ubWVudCwgZXRjLgorICAgIFRoZSBzaW1wbGUgRUVQUk9NIGVudmlyb25tZW50IGNhbiBiZSBzZWxlY3RlZCBlYXNpbHkgaW4gdGhlIGJvYXJkCisgICAgY29uZmlnIGZpbGUuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgMmM2ZmIxOTlkYzU3NTZmYzcyZjQ5ZDFmNGRlMTA1ZTA4OTA0OWQ2NQorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJVHVlIEFwciAyNCAxNDozNzo0OSAyMDA3ICswMjAwCisKKyAgICBDbGVhbnVwIFNUWCBHUDNTU0EgY29kZTsgZml4IGJ1aWxkIGFuZCBjb21waWxlIHByb2JsZW1zLgorCitjb21taXQgMzUxNzFkYzA0ZTAyOGVjYWNjMjNhZDkxNmE2NjI5NTQ3MjU1NWRiZgorQXV0aG9yOiBEYW4gTWFsZWsgPGRhbkBlbWJlZGRlZGFsbGV5LmNvbT4KK0RhdGU6CUZyaSBKYW4gNSAwOToxNTozNCAyMDA3ICswMTAwCisKKyAgICBBZGQgc3VwcG9ydCBmb3IgU1RYIEdQM1NTQSAoc3R4c3NhKSBCb2FyZAorCisgICAgU2lnbmVkLW9mZi1ieSBEYW4gTWFsZWssIDxkYW5AZW1iZWRkZWRhbGxleS5jb20+CisKK2NvbW1pdCBmZmE2MjFhMGQxMmExY2NkODFjOTM2YzU2N2Y4OTE3YTIxMzc4N2E4CitBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CVNhdCBGZWIgMjQgMDE6MDg6MTMgMjAwNyAtMDYwMAorCisgICAgQ2xlYW5lZCB1cCBzb21lIDg1eHggUENJIGJ1Z3MKKworICAgICogQ2xlYW5lZCB1cCB0aGUgQ0RTIFBDSSBDb25maWcgVGFibGVzIGFuZCBhZGRlZCBOVUxMIGVudHJpZXMgdG8KKyAgICAgIHRoZSBlbmQKKyAgICAqIEZpeGVkIFBDSWUgTEFXQkFSIGFzc2lnbmVtdCB0byB1c2UgdGhlIGNwdS1yZWxhdGl2ZSBhZGRyZXNzCisgICAgKiBGaXhlZCA4NXh4IFBDSSBjb2RlIHRvIGFzc2lnbiBwb3dhciByZWdpb24gc2l6ZXMgYmFzZWQgb24gdGhlCisgICAgICBjb25maWcgdmFsdWVzIChyYXRoZXIgdGhhbiBoYXJkLWNvZGluZyB0aGVtKQorICAgICogRml4ZWQgdGhlIDg1NDggQ0RTIFBDSTIgSU8gdG8gb25jZSBhZ2FpbiBoYXZlIDAgYXMgdGhlIGJhc2UgYWRkcmVzcworCisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorCitjb21taXQgNjc0MzEwNTk4OGZjNDRkNWIwZDMwMzg4Yzc5MDYwNzgzNWFhZTdhNgorQXV0aG9yOiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOglNb24gQXByIDIzIDAyOjU0OjI1IDIwMDcgLTA1MDAKKworICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgODU2OCBNRFMgYm9hcmQKKworICAgIFRoaXMgaW5jbHVkZWQgc29tZSBjaGFuZ2VzIHRvIGNvbW1vbiBmaWxlczoKKyAgICAqIEFkZCA4NTY4IHByb2Nlc3NvciBTVlIgdG8gdmFyaW91cyBwbGFjZXMKKyAgICAqIEFkZCBzdXBwb3J0IGZvciBzZXR0aW5nIHRoZSBxZSBidXMtZnJlcXVlbmN5IHZhbHVlIGluIHRoZSBkdHMKKyAgICAqIEFkZCB0aGUgODU2OE1EUyB0YXJnZXQgdG8gdGhlIE1ha2VmaWxlCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCBhZjFjMmI4NGJmMjdjODU2NWJhZGRjODJkMWFiYjkzNzAwZDEwZTJlCitBdXRob3I6IERhdmlkIFVwZGVncmFmZiA8ZGF2ZUBjcmF5LmNvbT4KK0RhdGU6CUZyaSBBcHIgMjAgMTQ6MzQ6NDggMjAwNyAtMDUwMAorCisgICAgQWRkIHN1cHBvcnQgZm9yIHRyZWF0aW5nIHVua25vd24gUEhZcyBhcyBnZW5lcmljIFBIWXMuCisKKyAgICBXaGVuIGJyaW5naW5nIHVwIHUtYm9vdCBvbiBuZXcgYm9hcmRzLCBQSFkgc3VwcG9ydCBzb21ldGltZXMgZ2V0cworICAgIG5lZ2xlY3RlZC4JTW9zdCBQSFlzIGRvbid0IHJlYWxseSBuZWVkIGFueSBzcGVjaWFsIHN1cHBvcnQsCisgICAgdGhvdWdoLiAgQnkgYWRkaW5nIGEgZ2VuZXJpYyBlbnRyeSB0aGF0IGFsd2F5cyBtYXRjaGVzIGlmIG5vdGhpbmcKKyAgICBlbHNlIGRvZXMsIHdlIGNhbiBwcm92aWRlIHN1cHBvcnQgZm9yICJ1bnN1cHBvcnRlZCIgUEhZcyBmb3IgdGhlCisgICAgdHNlYy4KKworICAgIFRoZSBnZW5lcmljIFBIWSBkcml2ZXIgc3VwcG9ydHMgbW9zdCBQSFlzLCBpbmNsdWRpbmcgZ2lnYWJpdC4KKworICAgIFNpZ25lZC1vZmYtYnk6IERhdmlkIFVwZGVncmFmZiA8ZGF2ZUBjcmF5LmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCBhNzVhZjliZmQ4ZmZmMDQ5OWVmZGJiOTA2MDFjZWM1YTJhZmVmMTE3CitBdXRob3I6IEphbWVzIFlhbmcgPEphbWVzLllhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CVdlZCBGZWIgNyAxNToyODowNCAyMDA3IC0wNjAwCisKKyAgICBDb25kaXRpb25hbGl6ZSA4NjQxIFJldjEuMCBNQ00gd29ya2Fyb3VuZHMKKworICAgIFNpZ25lZC1vZmYtYnk6IEphbWVzIFlhbmcgPEphbWVzLllhbmdAZnJlZXNjYWxlLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorCitjb21taXQgZjY0NzAyYjdmYzhmOGRmMzlkMzFhZGQ3NzBkZjZlMzcyZjllOWNlMworQXV0aG9yOiBUaW11ciBUYWJpIDx0aW11ckBmcmVlc2NhbGUuY29tPgorRGF0ZToJTW9uIEFwciAzMCAxMzo1OTo1MCAyMDA3IC0wNTAwCisKKyAgICBGaXggbWVtb3J5IGluaXRpYWxpemF0aW9uIG9uIE1QQzgzNDlFLW1JVFgKKworICAgIERlZmluZSBDRkdfRERSX1NEUkFNX0NMS19DTlRMIGZvciB0aGUgTVBDODM0OUUtbUlUWCBhbmQgTVBDODM0OUUtbUlUWC1HUC4KKyAgICBUaGlzIGFsbG93cyBkZHItPnNkcmFtX2Nsa19jbnRsIHRvIGJlIHByb3Blcmx5IGluaXRpYWxpemVkLiAgVGhpcyBpcyBuZWNlc3NhcnkKKyAgICBvbiBzb21lIElUWCBib2FyZHMsIG5vdGFibHkgdGhvc2Ugd2l0aCBhIHJldmlzaW9uIDMuMSBDUFUuCisKKyAgICBBbHNvIGNoYW5nZSBzcGRfc2RyYW0oKSBpbiBjcHUvbXBjODN4eC9zcGRfc2RyYW0uYyB0byBub3Qgd3JpdGUgYW55dGhpbmcgaW50bworICAgIGRkci0+c2RyYW1fY2xrX2NudGwgaWYgQ0ZHX0REUl9TRFJBTV9DTEtfQ05UTCBpcyBub3QgZGVmaW5lZC4KKworICAgIFNpZ25lZC1vZmYtYnk6IFRpbXVyIFRhYmkgPHRpbXVyQGZyZWVzY2FsZS5jb20+CisgICAgQWNrZWQtYnk6IE1pY2hhZWwgQmVuZWRpY3QgPE1CZW5lZGljdEB0d2Fjcy5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogS2ltIFBoaWxsaXBzIDxraW0ucGhpbGxpcHNAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IDU0YjJkNDM0YWU5ZDAxNzg3OTM2ZjM0ZmUxNzU5Y2YzZDc2MjRhZTMKK0F1dGhvcjogS2ltIFBoaWxsaXBzIDxraW0ucGhpbGxpcHNAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CU1vbiBBcHIgMzAgMTU6MjY6MjEgMjAwNyAtMDUwMAorCisgICAgbXBjODN4eDogcmVwbGFjZSBlbGFib3JhdGUgYm9vdHRpbWUgdmVyYm9zaXR5IHdpdGggJ2Nsb2NrcycgY29tbWFuZAorCisgICAgYW5kIGZpeCBDUFU6IHRvIGFsaWduIHdpdGggQm9hcmQ6IGRpc3BsYXkgdGV4dC4KKworICAgIFNpZ25lZC1vZmYtYnk6IEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCBjMWFiODI2NjlkOTUyNTk5OGMzNGU4MDJhMTJjYWQ2NjI3MjNmMjJhCitBdXRob3I6IEphbWVzIFlhbmcgPEphbWVzLllhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CUZyaSBNYXIgMTYgMTM6MDI6NTMgMjAwNyAtMDUwMAorCisgICAgUmV3cm90ZSBwaWNvc190b19jbGsoKSB0byBhdm9pZCByb3VuZGluZyBlcnJvcnMuCisgICAgQ2xhcmlmaWVkIHRoYXQgY29udmVyc2lvbiBpcyB0byBEUkFNIGNsb2NrcyByYXRoZXIgdGhhbiBwbGF0Zm9ybSBjbG9ja3MuCisgICAgTWFkZSBmdW5jdGlvbiBzdGF0aWMgdG8gc3BkX3NkcmFtLmMuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBKYW1lcyBZYW5nIDxKYW1lcy5ZYW5nQGZyZWVzY2FsZS5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IDhiMzk1MDFkMjg3NTRlNzI3MjZjZTdmYjAyMzEwZTU2ZGJkZjExNmEKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZToJU3VuIEFwciAyOSAxNDoxMzowMSAyMDA3ICswMjAwCisKKyAgICBwcGM0eHg6IEJhbWJvbzogVXNlIGN1cnJlbnQgTkFORCBkcml2ZXIgYW5kICpub3QqIHRoZSBsZWdhY3kgZHJpdmVyCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCA1YzVkMzI0MjkzNWNmMzU0M2FmMDExNDI2Mjc0OTQ0MzQ4MzRjZjk4CitBdXRob3I6IEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+CitEYXRlOglXZWQgQXByIDI1IDEyOjM0OjM4IDIwMDcgLTA1MDAKKworICAgIG1wYzgzeHg6IG1pbm9yIGZpeHVwcyBmb3IgODMxM3JkYiBpbnRyb2R1Y3Rpb24KKworY29tbWl0IDE0NDg3NmEzODBmNTc1NmY1NzQxMmNhZjc0YzFkNmRjMjAxZGQ3OTYKK0F1dGhvcjogTWljaGFsIFNpbWVrIDxtb25zdHJAbW9uc3RyLmV1PgorRGF0ZToJVHVlIEFwciAyNCAyMzowMTowMiAyMDA3ICswMjAwCisKKyAgICBbUEFUQ0hdIE1URCBwYXJ0aXRpb24gc3VwcG9ydCwgSkZGUzIgc3VwcG9ydAorCitjb21taXQgMzdlZDZjZGQ0MTU5MTk1YmZhZDY4ZDhhMjM3ZjZhZGRhOGY0ODJjYgorQXV0aG9yOiBNYXR0aGlhcyBGdWNocyA8bWF0dGhpYXMuZnVjaHNAZXNkLWVsZWN0cm9uaWNzLmNvbT4KK0RhdGU6CVR1ZSBBcHIgMjQgMTQ6MDM6NDUgMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBzZXR1cCA0NDBFUHgvR1J4IFpNSUkvUkdNSUkgYnJpZGdlIGRlcGVuZGluZyBvbiBQRkMgcmVnaXN0ZXIgY29udGVudC4KKworICAgIFNpZ25lZC1vZmYtYnk6IE1hdHRoaWFzIEZ1Y2hzIDxtYXR0aGlhcy5mdWNoc0Blc2QtZWxlY3Ryb25pY3MuY29tPgorCitjb21taXQgNjZlZDZjY2EzZjM0MGY3YThhMDZkOTI3MmFlMmVmOGU5NmYwMjczZAorQXV0aG9yOiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOglNb24gQXByIDIzIDAyOjM3OjQ3IDIwMDcgLTA1MDAKKworICAgIFJld29ya2VkIDg1eHggc3BlZWQgZGV0ZWN0aW9uIGNvZGUKKworICAgIENoYW5nZWQgdGhlIGNvZGUgdG8gcmVhZCB0aGUgcmVnaXN0ZXJzIGFuZCBjYWxjdWxhdGUgdGhlIGNsb2NrCisgICAgcmF0ZXMsIHJhdGhlciB0aGFuIHVzaW5nIGEgInN3aXRjaCIgc3RhdGVtZW50LgorCisgICAgSWRlYSBmcm9tIEFuZHJldyBLbG9zc25lciA8YW5kcmV3QGNlc2Eub3BidS54ZXJveC5jb20+CisKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCA4MWY0ODFjYTcwOGVkNmE1NmJmOWM0MTBlMzE5MWRiYWQ1ODFjNTY1CitBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CU1vbiBBcHIgMjMgMDI6MjQ6MjggMjAwNyAtMDUwMAorCisgICAgRW5hYmxlIDg1NDQgc3VwcG9ydAorCisgICAgKiBBZGQgc3VwcG9ydCB0byB0aGUgTWFrZWZpbGUKKyAgICAqIEFkZCA4NTQ0IGNvbmZpZ3VyYXRpb24gc3VwcG9ydCB0byB0aGUgdHNlYyBkcml2ZXIKKyAgICAqIEFkZCA4NTQ0IFNWUiBudW1iZXJzIHRvIHByb2Nlc3Nvci5oCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBFZCBTd2FydGhvdXQgPEVkLlN3YXJ0aG91dEBmcmVlc2NhbGUuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCAwZDhjM2EyMDk2ZWFmZjhkN2RlODlkNDVlOWFmNGQ0YjBkNDg2OGZlCitBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CUZyaSBGZWIgMjMgMTc6MTI6MjUgMjAwNyAtMDYwMAorCisgICAgU3VwcG9ydCAxRyBzaXplIG9uIDg1NDgKKworICAgIGU1MDB2MiBhbmQgbmV3ZXIgY29yZXMgc3VwcG9ydCAxRyBwYWdlIHNpemVzLgorCisgICAgU2lnbmVkLW9mZi1ieTogRWQgU3dhcnRob3V0IDxFZC5Td2FydGhvdXRAZnJlZXNjYWxlLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCA0NWNlZjYxMmNjNjAxZDJkMWM4OTBmYmJkN2NkYzk2MDlhMTg5YTQ2CitBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CUZyaSBGZWIgMjMgMTc6MTE6MTYgMjAwNyAtMDYwMAorCisgICAgQ2hhbmdlZCBCT09LRV9QQUdFU1pfbkdCIHRvIEJPT0tFX1BBR0VTWl9uRworCisgICAgVGhlIG90aGVyIHBhZ2VzeiBjb25zdGFudHMgdXNlIG9uZSBsZXR0ZXIgdG8gc3BlY2lmeSBvcmRlciBvZgorICAgIG1hZ25pdHVkZS4JQWxzbyBjaGFuZ2UgdGhlIG9uZSByZWZlcmVuY2UgdG8gaXQgaW4gbXBjODU0OGNkcy9pbml0LlMKKworICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IDFmOWEzMThjZWExNDI3MmVkZDEwZDYzNzM5ZTJkMzI2YzkwZjQzMGUKK0F1dGhvcjogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorRGF0ZToJRnJpIEZlYiAyMyAxNjoyODo0NiAyMDA3IC0wNjAwCisKKyAgICBPbmx5IHNldCBkZHJpb292Y3IgZm9yIDg1NDggcmV2MS4KKworICAgIFNpZ25lZC1vZmYtYnk6IEVkIFN3YXJ0aG91dCA8RWQuU3dhcnRob3V0QGZyZWVzY2FsZS5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorCitjb21taXQgOTM0M2RiZjg1YmMwMzAzM2YyMTAyZDhlODU0MzU2N2MyYzFhZDJkMgorQXV0aG9yOiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOglTYXQgRmViIDI0IDAxOjE2OjQ1IDIwMDcgLTA2MDAKKworICAgIFR3ZWFrIEREUiBFQ0MgZXJyb3IgY291bnRlcgorCisgICAgRW5hYmxlIHNpbmdsZS1iaXQgZXJyb3IgY291bnRlciB3aGVuIG1lbW9yeSB3YXMgY2xlYXJlZCBieSBkZHIgY29udHJvbGxlci4KKworICAgIFNpZ25lZC1vZmYtYnk6IEVkIFN3YXJ0aG91dCA8RWQuU3dhcnRob3V0QGZyZWVzY2FsZS5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorCitjb21taXQgODVlN2M3YTQ1ZTNkZDljN2NlM2U3MjIzNTJiYTYwZjhkZjFhN2E0YgorQXV0aG9yOiBUaW11ciBUYWJpIDx0aW11ckBmcmVlc2NhbGUuY29tPgorRGF0ZToJTW9uIEZlYiAxMiAxMzozNDo1NSAyMDA3IC0wNjAwCisKKyAgICA4NXh4OiB3cml0ZSBNQUMgYWRkcmVzcyB0byBtYWMtYWRkcmVzcyBhbmQgbG9jYWwtbWFjLWFkZHJlc3MKKworICAgIFNvbWUgZGV2aWNlIHRyZWVzIGhhdmUgYSBtYWMtYWRkcmVzcyBwcm9wZXJ0eSwgc29tZSBoYXZlIGxvY2FsLW1hYy1hZGRyZXNzLAorICAgIGFuZCBzb21lIGhhdmUgYm90aC4gIFRvIHN1cHBvcnQgYWxsIG9mIHRoZXNlIGRldmljZSB0cmVlcywgZnRwX2NwdV9zZXR1cCgpCisgICAgc2hvdWxkIHdyaXRlIHRoZSBNQUMgYWRkcmVzcyB0byBtYWMtYWRkcmVzcyBhbmQgbG9jYWwtbWFjLWFkZHJlc3MsIGlmIHRoZXkKKyAgICBleGlzdC4KKworICAgIFNpZ25lZC1vZmYtYnk6IFRpbXVyIFRhYmkgPHRpbXVyQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCAwM2I4MWI0OGVlYzBhZDI0OWVjOTdhNGFlMTZjMzZmYTJlMDE0ZmY0CitBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CU1vbiBBcHIgMjMgMDE6NDQ6NDQgMjAwNyAtMDUwMAorCisgICAgU29tZSA4NXh4IGNwdSBjbGVhbnVwcworCisgICAgKiBDbGVhbmVkIHVwIHRoZSBUU1JbV0lTXSBjbGVhcmluZworICAgICogQ2xlYW5lZCB1cCBETUEgaW5pdGlhbGl6YXRpb24KKworICAgIFNpZ25lZC1vZmYtYnk6IEVkIFN3YXJ0aG91dCA8RWQuU3dhcnRob3V0QGZyZWVzY2FsZS5jb20+CisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KKyAgICBBY2tlZC1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorCitjb21taXQgMTUxZDVkOTkyZWFiOGM0OTdiMjRjODE2YzczZGMxYWQ4YmZmYjRlYgorQXV0aG9yOiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOglNb24gQXByIDIzIDAxOjMyOjIyIDIwMDcgLTA1MDAKKworICAgIEFkZCBjcHUgc3VwcG9ydCBmb3IgdGhlIDg1NDQKKworICAgIFJlY29nbml6ZSBuZXcgU1ZSIHZhbHVlcywgYW5kIGFkZCBhIGZldyByZWdpc3RlciBkZWZpbml0aW9ucworCisgICAgU2lnbmVkLW9mZi1ieTogRWQgU3dhcnRob3V0IDxFZC5Td2FydGhvdXRAZnJlZXNjYWxlLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorICAgIEFja2VkLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCAyNWQ4M2Q3ZjRhYzY1NzI3MTgyZDhkZGFmN2JhNDJmYTc0Y2Y2NWFlCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOglXZWQgQXByIDExIDE2OjUxOjAyIDIwMDcgLTA1MDAKKworICAgIEFkZCBNUEM4NTQ0RFMgYmFzaWMgcG9ydCBib2FyZCBmaWxlcy4KKworICAgIEFkZCBib2FyZCBwb3J0IHVuZGVyIG5ldyBib2FyZC9mcmVlc2NhbGUgZGlyZWN0b3J5CisgICAgc3RydWN0dXJlIGFuZCByZXVzZSBleGlzdGluZyBQSVhJUyBGUEdBIHN1cHBvcnQgdGhlcmUuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBFZCBTd2FydGhvdXQgPEVkLlN3YXJ0aG91dEBmcmVlc2NhbGUuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCAwY2RlNGIwMGZjNzM5M2I4OWYzNzlkODNhOWQ0MzZkY2IxMzM0YmZhCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOglXZWQgQXByIDExIDE2OjUwOjU3IDIwMDcgLTA1MDAKKworICAgIEFkZCBNUEM4NTQ0RFMgbWFpbiBjb25maWd1cmF0aW9uIGZpbGUuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBFZCBTd2FydGhvdXQgPEVkLlN3YXJ0aG91dEBmcmVlc2NhbGUuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCAzNjJkZDgzMDc3YWMwNGMwMjk2YmNhM2U4MjRlYzJmYjNkNDRkOWQ2CitBdXRob3I6IFNlcmdlaSBTaHR5bHlvdiA8c3NodHlseW92QHJ1Lm12aXN0YS5jb20+CitEYXRlOglXZWQgRGVjIDI3IDIyOjA3OjE1IDIwMDYgKzAzMDAKKworICAgIEZpeCBQQ0kgSS9PIHNwYWNlIG1hcHBpbmcgb24gRnJlZXNjYWxlIE1QQzg1eDBBRFMKKworICAgIFRoZSBQQ0kgSS9PIHNwYWNlIG1hcHBpbmcgZm9yIEZyZWVzY2FsZSBNUEM4NTQwQURTIGJvYXJkIHdhcyBicm9rZW4gYnkgY29tbWl0CisgICAgNTJjN2E2OGI4ZDU4N2ViY2Y1YTZiMDUxYjU4YjNkM2ZmYTM3N2RkYyB3aGljaCBmYWlsZWQgdG8gdXBkYXRlIHRoZSAjZGVmaW5lJ3MKKyAgICBkZXNjcmliaW5nIHRoZSBsb2NhbCBhZGRyZXNzIHdpbmRvdyB1c2VkIGZvciB0aGUgUENJIEkvTyBzcGFjZSBhY2Nlc3NlcyAtLSBmaXgKKyAgICB0aGlzIGFuZCBjYXJyeSBvdmVyIHRoZSBuZWNlc3NhcnkgY2hhbmdlcyBpbnRvIHRoZSBNUEM4NTYwQURTIGNvZGUgc2luY2UgdGhlCisgICAgUENJIEkvTyBzcGFjZSBtYXBwaW5nIHdhcyBhbHNvIGJyb2tlbiBmb3IgdGhpcyBib2FyZCAoYnkgdGhlIGVhcmxpZXIgY29tbWl0CisgICAgMDg3NDU0NjA5ZTQ3Mjk1NDQzYWY3OTNhMjgyY2RkY2Q5MWE1ZjQ5YykuCUFkZCB0aGUgY29tbWVudHMgY2xhcmlmeWluZyBob3cKKyAgICB0aGUgUENJIEkvTyBzcGFjZSBtdXN0IGJlIG1hcHBlZCB0byBhbGwgdGhlIE1QQzg1eHggYm9hcmQgY29uZmlnLiBoZWFkZXJzLgorCisgICAgU2lnbmVkLW9mZi1ieTogU2VyZ2VpIFNodHlseW92IDxzc2h0eWx5b3ZAcnUubXZpc3RhLmNvbT4KKworICAgICBib2FyZC9tcGM4NTQwYWRzL2luaXQuUwkgIHwgICAgNCArKy0tCisgICAgIGJvYXJkL21wYzg1NjBhZHMvaW5pdC5TCSAgfCAgICA0ICsrLS0KKyAgICAgaW5jbHVkZS9jb25maWdzL01QQzg1NDBBRFMuaCB8ICAgIDUgKystLS0KKyAgICAgaW5jbHVkZS9jb25maWdzL01QQzg1NDFDRFMuaCB8ICAgIDIgKy0KKyAgICAgaW5jbHVkZS9jb25maWdzL01QQzg1NDhDRFMuaCB8ICAgIDIgKy0KKyAgICAgaW5jbHVkZS9jb25maWdzL01QQzg1NjBBRFMuaCB8ICAgIDggKysrKy0tLS0KKyAgICAgNiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKKworY29tbWl0IDk2NjI5Y2JhYmRiNzI3ZDRhNWU2MjU0MmRlZWZjMDFkNDk4ZGI2ZGMKK0F1dGhvcjogWmFuZyBSb3ktcjYxOTExIDx0aWUtZmVpLnphbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CVR1ZSBEZWMgNSAxNjo0MjozMCAyMDA2ICswODAwCisKKyAgICB1LWJvb3Q6IEZpeCBlNTAwIHYyIGNvcmUgcmVzZXQgYnVnCisKKyAgICBUaGUgZm9sbG93aW5nIHBhdGNoIGZpeGVzIHRoZSBlNTAwIHYyIGNvcmUgcmVzZXQgYnVnLgorICAgIEZvciBlNTAwIHYyIGNvcmUsIGEgbmV3IHJlc2V0IGNvbnRyb2wgcmVnaXN0ZXIgaXMgYWRkZWQgdG8gcmVzZXQgdGhlCisgICAgcHJvY2Vzc29yLgorCisgICAgU2lnbmVkLW9mZi1ieTogUm95IFphbmcgPHRpZS1mZWkuemFuZ0BmcmVlc2NhbGUuY29tPgorCitjb21taXQgNjMyNDdhNWFjZDU4MDMyZTZjZjMzZjUyNWJjMzkyM2I0NjdiYWM4OAorQXV0aG9yOiBaYW5nIFJveS1yNjE5MTEgPHRpZS1mZWkuemFuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZToJV2VkIERlYyAyMCAxMTowMTowMCAyMDA2ICswODAwCisKKyAgICB1LWJvb3Q6IHYyOiBSZW1vdmUgdGhlIGZpeGVkIFRMQiBhbmQgTEFXIGVudHJ5bnVibWVyCisKKyAgICBSZW1vdmUgdGhlIGZpeGVkIFRMQiBhbmQgTEFXIGVudHJ5IG51Ym1lci4gVXNlIGFjdHVhbGx5IFRMQiBhbmQgTEFXCisgICAgZW50cnkgbnVtYmVyIHRvIGNvbnRyb2wgdGhlIGxvb3AuICBUaGlzIGNhbiByZWR1Y2UgdGhlIHBvdGVudGlhbCByaXNrCisgICAgZm9yIHRoZSA4NXh4IHByb2Nlc3NvciBpbmNyZWFzaW5nIGl0cyBUTEIgYWRuIExBVyBlbnRyeSBudW1iZXIuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTd2FydGhvdXQgRWR3YXJkIDxzd2FydGhvdXRAZnJlZXNjYWxlLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBSb3kgWmFuZyA8dGllLWZlaS56YW5nQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCAwYjE5MzRiYTEyZmQ0MDhmY2MzYjhiZDlmNGIwNDg2NGM0MmE0MmJmCitBdXRob3I6IFphbmcgUm95LXI2MTkxMSA8dGllLWZlaS56YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOglNb24gRGVjIDE4IDE3OjAxOjA0IDIwMDYgKzA4MDAKKworICAgIHUtYm9vdDogRml4IHRoZSA4NXh4Y2RzIHRzZWMgYnVnCisKKyAgICBGaXggdGhlIDg1eHhjZHMgdHNlYyBidWcuCisgICAgV2hlbiBlbmFibGUgUENJLCB0c2VjLm8gc2hvdWxkIGJlIGFkZGVkIHRvIHUtYm9vdC5sZHMgdG8gbWFrZSB0c2VjIHdvcmsuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBSb3kgWmFuZyA8dGllLWZlaS56YW5nQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCA3MzM3YjIzN2ZmYzRhYWYxYjk0NjcwMjRmZTQ3MmE4ODBkODUyNTk4CitBdXRob3I6IFphbmcgUm95LXI2MTkxMSA8dGllLWZlaS56YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOglGcmkgRGVjIDE1IDE0OjQzOjMxIDIwMDYgKzA4MDAKKworICAgIHUtYm9vdDogRml4IENQVTIgZXJyYXRhIG9uIE1QQzg1NDhDRFMgYm9hcmQKKworICAgIFRoaXMgcGF0Y2ggYXBwbHkgd29ya2Fyb3VuZCBvZiBDUFUyIGVycmF0YSBvbiBNUEM4NTQ4Q0RTIGJvYXJkLgorCisgICAgU2lnbmVkLW9mZi1ieTpFYm9ueSBaaHUgPGVib255LnpodUBmcmVlc2NhbGUuY29tPgorCitjb21taXQgMzliMThjNGYzZTBiNmQwZGMwMGY0ZTY4YmFkMmRhMzc2NmM4NWYwOQorQXV0aG9yOiBlYm9ueS56aHVAZnJlZXNjYWxlLmNvbSA8ZWJvbnkuemh1QGZyZWVzY2FsZS5jb20+CitEYXRlOglNb24gRGVjIDE4IDE2OjI1OjE1IDIwMDYgKzA4MDAKKworICAgIHUtYm9vdDogRGlzYWJsZXMgTVBDODU0OENEUyAyVF9USU1JTkcgZm9yIEREUiBieSBkZWZhdWx0CisKKyAgICBUaGlzIHBhdGNoIGRpc2FibGVzIE1QQzg1NDhDRFMgMlRfVElNSU5HIGZvciBERFIgYnkgZGVmYXVsdC4KKworICAgIFNpZ25lZC1vZmYtYnk6RWJvbnkgWmh1IDxlYm9ueS56aHVAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IDQxZmI3ZTBmMWVjOWI5MWJkYWUyNTY1YmFiNWYyZTNlZTE1MDM5YzcKK0F1dGhvcjogWmFuZyBSb3ktcjYxOTExIDx0aWUtZmVpLnphbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CVRodSBEZWMgMTQgMTQ6MTQ6NTUgMjAwNiArMDgwMAorCisgICAgdS1ib290OiBFbmFibGUgUENJIGZ1bmN0aW9uIGFuZCBhZGQgUEVYICYgcmFwaWRpbyBtZW1vcnkgbWFwIG9uIE1QQzg1NDhDRFMgYm9hcmQKKworICAgIEVuYWJsZSBQQ0kgZnVuY3Rpb24gYW5kIGFkZCBQRVggJiByYXBpZGlvIG1lbW9yeSBtYXAgb24gTVBDODU0OENEUworICAgIGJvYXJkLgorICAgIFNpZ25lZC1vZmYtYnk6IFJveSBaYW5nIDx0aWUtZmVpLnphbmdAZnJlZXNjYWxlLmNvbT4KKworY29tbWl0IDk2YjhhMDU0MzJmMzQ2ZjM2NDkzNTM1Yzg1MzIwYjcwZWM5YzdjMWIKK0F1dGhvcjogU2NvdHQgV29vZCA8c2NvdHR3b29kQGZyZWVzY2FsZS5jb20+CitEYXRlOglNb24gQXByIDE2IDE0OjU0OjE1IDIwMDcgLTA1MDAKKworICAgIG1wYzgzeHg6IEFkZCBNUEM4MzEzRVJEQiBzdXBwb3J0LgorCisgICAgU2lnbmVkLW9mZi1ieTogU2NvdHQgV29vZCA8c2NvdHR3b29kQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCA0OWVhM2I2ZWFmZTYwNjI4NWFlNGQ1YzM3ODAyNjE1M2RkZTUzMjAwCitBdXRob3I6IFNjb3R0IFdvb2QgPHNjb3R0d29vZEBmcmVlc2NhbGUuY29tPgorRGF0ZToJTW9uIEFwciAxNiAxNDozNDoyMSAyMDA3IC0wNTAwCisKKyAgICBtcGM4M3h4OiBBZGQgZ2VuZXJpYyBQQ0kgc2V0dXAgY29kZS4KKworICAgIEJvYXJkIGNvZGUgY2FuIG5vdyByZXF1ZXN0IHRoZSBnZW5lcmljIHNldHVwIGNvZGUgcmF0aGVyIHRoYW4gaGF2aW5nIHRvCisgICAgY29weS1hbmQtcGFzdGUgaXQgZm9yIHRoZW1zZWx2ZXMuICBCb2FyZHMgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byB1c2UgdGhpcworICAgIG9uY2UgdGhleSdyZSB0ZXN0ZWQgd2l0aCBpdC4KKworICAgIFNpZ25lZC1vZmYtYnk6IFNjb3R0IFdvb2QgPHNjb3R0d29vZEBmcmVlc2NhbGUuY29tPgorCitjb21taXQgN2M5OGU1MTkzZTkzZGY2YjliNjUxODUxZDU0YjYzOGE2MWViYjBlYQorQXV0aG9yOiBTY290dCBXb29kIDxzY290dHdvb2RAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CU1vbiBBcHIgMTYgMTQ6MzQ6MTkgMjAwNyAtMDUwMAorCisgICAgbXBjODN4eDogQWRkIDgzMXggc3VwcG9ydCB0byBzcGVlZC5jLgorCisgICAgU2lnbmVkLW9mZi1ieTogU2NvdHQgV29vZCA8c2NvdHR3b29kQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCAwZjI1MzI4M2EzMmQ5MWUwNjg0NGQ3Zjg3ZjliMzNmNGY0ZmJjZThmCitBdXRob3I6IFNjb3R0IFdvb2QgPHNjb3R0d29vZEBmcmVlc2NhbGUuY29tPgorRGF0ZToJTW9uIEFwciAxNiAxNDozNDoxOCAyMDA3IC0wNTAwCisKKyAgICBtcGM4M3h4OiBBZGQgODMxeCBzdXBwb3J0IHRvIGdsb2JhbF9kYXRhLmgKKworICAgIFNpZ25lZC1vZmYtYnk6IFNjb3R0IFdvb2QgPHNjb3R0d29vZEBmcmVlc2NhbGUuY29tPgorCitjb21taXQgOTVlN2VmODk3ZTU0NTkxZTYxNWZjMWI0NThiNzRjMjg2ZmUxZmIwNgorQXV0aG9yOiBTY290dCBXb29kIDxzY290dHdvb2RAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CU1vbiBBcHIgMTYgMTQ6MzQ6MTYgMjAwNyAtMDUwMAorCisgICAgbXBjODN4eDogQ2hhbmdlIFBWUl84M3h4IHRvIFBWUl9FMzAwQzEtMywgYW5kIHVwZGF0ZSBjaGVja2NwdSgpLgorCisgICAgUmF0aGVyIHRoYW4gbWlzbGVhZGluZ2x5IGRlZmluZSBQVlJfODN4eCBhcyB0aGUgc3BlY2lmaWMgdHlwZSBvZiA4M3h4CisgICAgYmVpbmcgYnVpbHQgZm9yLCB0aGUgUFZSIG9mIGVhY2ggY29yZSByZXZpc2lvbiBpcyBkZWZpbmVkLiBjaGVja2NwdSgpIG5vdworICAgIHByaW50cyB0aGUgY29yZSB0aGF0IGl0IGRldGVjdHMsIHJhdGhlciB0aGFuIGFib3J0aW5nIGlmIGl0IGRvZXNuJ3QgZmluZAorICAgIHdoYXQgaXQgdGhpbmtzIGl0IHdhbnRzLgorCisgICAgU2lnbmVkLW9mZi1ieTogU2NvdHQgV29vZCA8c2NvdHR3b29kQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCBhMzViMGM0OTUwZDg0Y2Y5ZTNhOWUzMmI5MTYxMzU5NTZkMWFjNjM2CitBdXRob3I6IFNjb3R0IFdvb2QgPHNjb3R0d29vZEBmcmVlc2NhbGUuY29tPgorRGF0ZToJTW9uIEFwciAxNiAxNDozNDoxNSAyMDA3IC0wNTAwCisKKyAgICBtcGM4M3h4OiBSZWNvZ25pemUgU1BSIHZhbHVlcyBmb3IgTVBDODMxMSBhbmQgTVBDODMxMy4KKworICAgIFNpZ25lZC1vZmYtYnk6IFNjb3R0IFdvb2QgPHNjb3R0d29vZEBmcmVlc2NhbGUuY29tPgorCitjb21taXQgZDg3YzU3YjIwMWI0NTcyZDE2ZjFiNjQyOTk4ZmFhMDBjOTkxMmIxNgorQXV0aG9yOiBTY290dCBXb29kIDxzY290dHdvb2RAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CU1vbiBBcHIgMTYgMTQ6MzE6NTUgMjAwNyAtMDUwMAorCisgICAgbXBjODN4eDogQWRkIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBNUEM4MzF4LgorCisgICAgU2lnbmVkLW9mZi1ieTogU2NvdHQgV29vZCA8c2NvdHR3b29kQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCAzMjNiZmE4ZjQzNmRjM2JjNTcxODdjOWIxNDg4YmMzMTQ2ZmYxNTIyCitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CU1vbiBBcHIgMjMgMTI6MDA6MjIgMjAwNyArMDIwMAorCisgICAgUmVtb3ZlIEJPQVJETElCUyB1c2FnZSBjb21wbGV0ZWx5CisKKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCAzMjU1NjQ0Mzg0MGYxMjcxNzBlNGJhYThiZGQ1YjU2NzAzOWY2YzM2CitBdXRob3I6IE1pY2hhbCBTaW1layA8bW9uc3RyQG1vbnN0ci5ldT4KK0RhdGU6CVNhdCBBcHIgMjEgMjE6MDc6MjIgMjAwNyArMDIwMAorCisgICAgW1BBVENIXSBTeXN0ZW1BQ0Ugc3VwcG9ydCBmb3IgTWljcm9ibGF6ZQorCitjb21taXQgMDY0MzYzMWFhMTAzNmNkNzQ2YmY1ZDE1ZjVhMzRiYzdiYzAxZWE0ZgorQXV0aG9yOiBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CitEYXRlOglTYXQgQXByIDIxIDIxOjAyOjQwIDIwMDcgKzAyMDAKKworICAgIDE2Yml0IHJlYWQvd3JpdGUgbGl0dGxlIGVuZGlhbgorCitjb21taXQgOWQxZDZhMzRkMjZjNTkzM2JjMDk3Y2U3M2M5MzQ4Zjk1NTczY2RkNAorQXV0aG9yOiBNaWNoYWwgU2ltZWsgPG1vbnN0ckBtb25zdHIuZXU+CitEYXRlOglTYXQgQXByIDIxIDIwOjUzOjMxIDIwMDcgKzAyMDAKKworICAgIENoYW5nZSBNTDQwMSBwYXJhbWV0ZXJzIC0gWGlsaW54IEJTUAorCitjb21taXQgMmUzNDNiOWE1N2YzMmUxYmQwOGMzNWM5OTc2OTEwMzMzZmI0ZTEzZAorQXV0aG9yOiBFZCBTd2FydGhvdXQgPEVkLlN3YXJ0aG91dEBmcmVlc2NhbGUuY29tPgorRGF0ZToJV2VkIEZlYiAyOCAwNTozNzoyOSAyMDA3IC0wNjAwCisKKyAgICBtcGM4NjQxaHBjbjogRml4IExBVyBhbmQgVExCIHNldHVwIHRvIHVzZSB0aGUgSU9fUEhZUyAjZGVmaW5lcy4KKworICAgIFNpZ25lZC1vZmYtYnk6IEVkIFN3YXJ0aG91dCA8RWQuU3dhcnRob3V0QGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCA3OWNiNDczOTFlZWJlZjg1YWNhZGIzZjY5NjFlZjZjNTVjYWNlNmFjCitBdXRob3I6IFpoYW5nIFdlaSA8d2VpLnpoYW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOglGcmkgSmFuIDE5IDEwOjQyOjM3IDIwMDcgKzA4MDAKKworICAgIEVuYWJsZSBMQVdzIGZvciBNUEM4NjQxIFBDSS1FeDIuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CisKK2NvbW1pdCBiZDc4NTFjZTFlMWYxNDA2NjViNTIwMDI2YWJmMTA0Mjk2OGIxMTAyCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOglGcmkgQXByIDIwIDE0OjEyOjI2IDIwMDcgLTA1MDAKKworICAgIG1wYzg2eHg7IFdyaXRlIE1BQyBhZGRyZXNzIHRvIG1hYy1hZGRyZXNzIGFuZCBsb2NhbC1tYWMtYWRkcmVzcworCisgICAgU29tZSBkZXZpY2UgdHJlZXMgaGF2ZSBhIG1hYy1hZGRyZXNzIHByb3BlcnR5LCBzb21lIGhhdmUgbG9jYWwtbWFjLWFkZHJlc3MsCisgICAgYW5kIHNvbWUgaGF2ZSBib3RoLiAgVG8gc3VwcG9ydCBhbGwgb2YgdGhlc2UgZGV2aWNlIHRyZWVzLCBmdHBfY3B1X3NldHVwKCkKKyAgICBzaG91bGQgd3JpdGUgdGhlIE1BQyBhZGRyZXNzIHRvIG1hYy1hZGRyZXNzIGFuZCBsb2NhbC1tYWMtYWRkcmVzcywgaWYgdGhleQorICAgIGV4aXN0LgorCisgICAgU2lnbmVkLW9mZi1ieTogVGltdXIgVGFiaSA8dGltdXJAZnJlZXNjYWxlLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorCitjb21taXQgN2RiZGYyOGI4YmQ4NTVhODUzMGRjMzI5MmU0OTgyNTc1YTE5NzA2MAorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZToJRnJpIEFwciAyMCAxNDoxMTozOCAyMDA3IC0wNTAwCisKKyAgICBtcGM4Nnh4OiBwcm90ZWN0IG1lbWNweSB0byBiYWQgYWRkcmVzcyBpZiBhIG1hYy1hZGRyZXNzIGlzIG1pc3NpbmcgZnJvbSBkdAorCisgICAgU2lnbmVkLW9mZi1ieTogS2ltIFBoaWxsaXBzIDxraW0ucGhpbGxpcHNAZnJlZXNjYWxlLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorCitjb21taXQgMTRkYTVmNzY3NWJiYjQyN2M0NjllM2Y0NTAwNmUwMjdiNmUyMWRiOQorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJRnJpIEFwciAyMCAxNzo0MzoyOCAyMDA3ICswMjAwCisKKyAgICBDbGVhbnVwIGNvbXBpbGVyIHdhcm5pbmdzLCB1cGRhdGUgQ0hBTkdFTE9HCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCitjb21taXQgNjkyMzU2NWRiMTJhZjM0ZmQ1ZTAyZDM1NGVlNjVhOGM3OGFjNDYwZgorQXV0aG9yOiBEZXRsZXYgWnVuZGVsIDxkenVAZGVueC5kZT4KK0RhdGU6CUZyaSBBcHIgMjAgMTI6MDE6NDcgMjAwNyArMDIwMAorCisgICAgRml4IGJyZWFrYWdlIG9mIE5DNjUwIGJvYXJkIHdpdGggcmVzcGVjdCB0byBuYW5kIHN1cHBvcnQuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBEZXRsZXYgWnVuZGVsIDxkenVAZGVueC5kZT4KKworY29tbWl0IDM5ZjIzY2Q5MDk0NzYzOWFjMjc4YTE4ZmYyNzdlYzc4NmI1YWMxNjcKK0F1dGhvcjogRG9tZW4gUHVuY2VyIDxkb21lbi5wdW5jZXJAdGVsYXJnby5jb20+CitEYXRlOglGcmkgQXByIDIwIDExOjEzOjE2IDIwMDcgKzAyMDAKKworICAgIFtSRkMgUEFUQ0hdIGljZWN1YmUvbGl0ZTUyMDBiOiBmaXggT0ZfVEJDTEsgKHRpbWViYXNlLWZyZXF1ZW5jeSkgY2FsY3VsYXRpb24KKworICAgIEcyIGNvcmUgcmVmZXJlbmNlIG1hbnVhbCBzYXlzIGRlY3JlbWVudGVyIGFuZCB0aW1lIGJhc2UKKyAgICBhcmUgZGVjcmVhc2luZy9pbmNyZWFzaW5nIG9uY2UgZXZlcnkgNCBidXMgY2xvY2sgY3ljbGVzLgorICAgIExldHMgZml4IGl0LCBzbyB0aW1lIGluIExpbnV4IHdvbid0IHJ1biB0d2ljZSBhcyBmYXN0CisKKyAgICBTaWduZWQtb2ZmLWJ5OiBEb21lbiBQdW5jZXIgPGRvbWVuLnB1bmNlckB0ZWxhcmdvLmNvbT4KKyAgICBBY2tlZC1ieTogR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorCitjb21taXQgNzY1MWY4YmRiYmEwM2JiMGI0ZjI0MWUyZDJjNGNiNjViMjMwYmQ1NgorQXV0aG9yOiBHZXJhbGQgVmFuIEJhcmVuIDx2YW5iYXJlbkBjaWRlYXMuY29tPgorRGF0ZToJVGh1IEFwciAxOSAyMzoxNDozOSAyMDA3IC0wNDAwCisKKyAgICBGaXggc2VyaW91cyBwb2ludGVyIGJ1ZyB3aXRoIGJvb3RtIGFuZCByZXNlcnZlIG1hcC4KKworICAgIFdoYXQgd2FzIHN1cHBvc2UgdG8gYmUgYSBzdGFjayB2YXJpYWJsZSB3YXMgZGVjbGFyZWQgYXMgYSBwb2ludGVyLAorICAgICAgb3ZlcndyaXRpbmcgcmFuZG9tIG1lbW9yeS4KKyAgICBBbHNvIG1vdmVkIHRoZSBsaWJmZHQuYSByZXF1aXJlbWVudCBpbnRvIHRoZSBtYWluIE1ha2VmaWxlLiAgVGhhdCBpcworICAgICAgVGhlIFUtQm9vdCBXYXkuCisKK2NvbW1pdCBkMjE2ODYyNjM1NzRlOTVjYjNlOWU5YjA0OTZmOTY4YjFiODk3ZmRiCitBdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KK0RhdGU6CVRodSBBcHIgMTkgMDk6NTM6NTIgMjAwNyArMDIwMAorCisgICAgcHBjNHh4OiBGaXggY2hpcCBzZWxlY3QgdGltaW5nIGZvciBTeXNBQ0UgYWNjZXNzIG9uIEFNQ0MgS2F0bWFpCisKKyAgICBQcmV2aW91cyB2ZXJzaW9ucyB1c2VkIGZ1bGwgd2FpdCBzdGF0ZXMgZm9yIHRoZSBjaGlwIHNlbGVjdCAjMSB3aGljaAorICAgIGlzIGNvbm5lY3RlZCB0byB0aGUgWGlsaW5peCBTeXN0ZW1BQ0UgY29udHJvbGxlciBvbiB0aGUgQU1DQyBLYXRtYWkKKyAgICBldmFsdWF0aW9uIGJvYXJkLiBUaGlzIGxlYWRzIHRvIHJlYWxseSBzbG93IGFjY2VzcyBhbmQgdGhlcmVmb3JlIGxvdworICAgIHBlcmZvcm1hbmNlLiBUaGlzIHBhdGNoIG5vdyBzZXRzIHVwIHRoZSBjaGlwIHNlbGVjdCBhIGxvdCBmYXN0ZXIKKyAgICByZXN1bHRpbmcgaW4gbXVjaCBiZXR0ZXIgcmVhZC93cml0ZSBwZXJmb3JtYW5jZSBvZiB0aGUgTGludXggZHJpdmVyLgorCisgICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorCitjb21taXQgMzc4Mzc4MjhkODkwODQ4NzliZWUyZjJiOGM3YzY4ZDQ2OTU5NDBkZgorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorRGF0ZToJV2VkIEFwciAxOCAxNzo0OToyOSAyMDA3ICswMjAwCisKKyAgICBDbGVuYXVwLCB1cGRhdGUgQ0hBTkdFTE9HCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorCiBjb21taXQgZmQwOTRjNjM3OWUyZWY4YTRkMGNlYjU2NDBiMjRjYjBjOGQwNDQ0OQogQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgogRGF0ZToJV2VkIEFwciAxOCAxNzoyMDo1OCAyMDA3ICswMjAwCkBAIC02Miw2ICsxNDEzLDE0IEBACiAKICAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CiAKK2NvbW1pdCA5YzAwZGZiMGJmODljOGMyM2U4YWY1YjViZGY0OWNmNjZkNzY5Zjg1CitBdXRob3I6IFBldGVyIFBlYXJzZSA8cGV0ZXIucGVhcnNlQGFybS5jb20+CitEYXRlOglUdWUgQXByIDE3IDEzOjMwOjMzIDIwMDcgKzAxMDAKKworICAgIE1vdmUgcHBlYXJzZSB0byBBUk0gYm9hcmQgbGlzdAorICAgIEFkZCBLb25zdGFudGluIEtsZXRzY2hrZSBmb3Igc2NiOTMyOC4KKyAgICBTaWduZWQtb2ZmLWJ5OiBQZXRlciBQZWFyc2UgPHBldGVyLnBlYXJzZUBhcm0uY29tPgorCiBjb21taXQgZDM4MzJlOGZlMWIyMTRlYzYyNDI0ZWFjMzZjZmRhOWZjNTZkMjFiMwogQXV0aG9yOiBEb21lbiBQdW5jZXIgPGRvbWVuLnB1bmNlckB0ZWxhcmdvLmNvbT4KIERhdGU6CU1vbiBBcHIgMTYgMTQ6MDA6MTMgMjAwNyArMDIwMApAQCAtMzcwLDYgKzE3MjksMTggQEAKICAgICBTaWduZWQtb2YtYnk6IEdyZWcgTG9wcCA8bG9wcEBwb2JveC5jb20+CiAgICAgQWNrZWQtYnk6IEdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KIAorY29tbWl0IDZmYmYyNjFmOGRmMjk0ZTU4OWNmYWRlYmViZTU0NjhlM2MwZjI5ZTkKK0F1dGhvcjogWGllIFhpYW9ibyA8cjYzMDYxQGZyZWVzY2FsZS5jb20+CitEYXRlOglGcmkgTWFyIDkgMTk6MDg6MjUgMjAwNyArMDgwMAorCisgICAgRml4IHR3byBidWdzIGZvciBNUEM4M3h4IEREUjIgY29udHJvbGxlciBTUEQgSW5pdAorCisgICAgVGhlcmUgYXJlIGEgZmV3IGJ1Z3MgaW4gdGhlIGNwdS9tcGM4M3h4L3NwZF9zZHJhbS5jCisgICAgdGhlIGZpcnN0IGJ1ZyBpcyB0aGF0IHRoZSBwaWNvc190b19jbGsgcm91dGluZSBpbnRyb2R1Y2VzIGEgaHVnZQorICAgIHJvdW5kaW5nIGVycm9yIGluIDgzeHguCisgICAgdGhlIHNlY29uZCBidWcgaXMgdGhhdCB0aGUgbW9kZSByZWdpc3RlciB3cml0ZSByZWNvdmVyeSBmaWVsZCBpcworICAgIHRXUi0xLCBub3QgdFdSID4+IDEuCisKIGNvbW1pdCAyYWQzYWJhMDFkMzdiNzJlN2M5NTdiMDdlMTAyZmNjZDY0ZmU2ZDEzCiBBdXRob3I6IEplZmZyZXkgTWFubiA8bWFubmpAZW1iZWRkZWRwbGFuZXQuY29tPgogRGF0ZToJVGh1IEFwciAxMiAxNDoxNTo1OSAyMDA3ICswMjAwCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDJhNDM4NDguLjJlYWVmMTcgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0yMjEsMTAgKzIyMSwxMSBAQAogCiAJTVBDODY0MUhQQ04JCU1QQzg2NDFECiAKLURhbiBNYWxlayA8ZGFuQGVtYmVkZGVkZWRnZS5jb20+CitEYW4gTWFsZWsgPGRhbkBlbWJlZGRlZGFsbGV5LmNvbT4KIAotCVNUeEdQMwkJCU1QQzg1eHgKLQlTVHhYVGMJCQlNUEM4eHgKKwlzdHhncDMJCQlNUEM4NXh4CisJc3R4c3NhCQkJTVBDODV4eAorCXN0eHh0YwkJCU1QQzh4eAogCiBFcmFuIE1hbiA8ZXJhbkBuYmFzZS5jby5pbD4KIApAQCAtMjU3LDE1ICsyNTgsNiBAQAogCiAJZXA4MjYwCQkJTVBDODI2MAogCi1QZXRlciBQZWFyc2UgPHBldGVyLnBlYXJzZUBhcm0uY29tPgotCWludGVncmF0b3JjcAkJQWxsIGN1cnJlbnQgQVJNIHN1cHBsaWVkICYKLQkJCQlzdXBwb3J0ZWQgY29yZSBtb2R1bGVzCi0JCQkJLSBzZWUgaHR0cDovL3d3dy5hcm0uY29tCi0JCQkJL3Byb2R1Y3RzL0RldlRvb2xzCi0JCQkJL0hhcmR3YXJlX1BsYXRmb3Jtcy5odG1sCi0JdmVyc2F0aWxlCQlBUk05MjZFSi1TCi0JdmVyc2F0aWxlCQlBUk05MjZFSi1TCi0KIERlbmlzIFBldGVyIDxkLnBldGVyQG1wbC5jaD4KIAogCU1JUDQwNQkJCVBQQzR4eApAQCAtNDQ0LDYgKzQzNiw5IEBACiAJc21kazI0MDAJCUFSTTkyMFQKIAl0cmFiCQkJQVJNOTIwVAogCitLb25zdGFudGluIEtsZXRzY2hrZSA8a2xldHNjaGtlQHN5bmVydHJvbml4eC5kZT4KKwlzY2I5MzI4CQkJQVJNOTIwVAorCiBOaXNoYW50IEthbWF0IDxuc2thbWF0QHRpLmNvbT4KIAogCW9tYXAxNjEwaDIJCUFSTTkyNkVKUwpAQCAtNDYxLDYgKzQ1NiwxNSBAQAogCiAJc2hhbm5vbgkJCVNBMTEwMAogCitQZXRlciBQZWFyc2UgPHBldGVyLnBlYXJzZUBhcm0uY29tPgorCWludGVncmF0b3JjcAkJQWxsIGN1cnJlbnQgQVJNIHN1cHBsaWVkICYKKwkJCQlzdXBwb3J0ZWQgY29yZSBtb2R1bGVzCisJCQkJLXNlZSBodHRwOi8vd3d3LmFybS5jb20KKwkJCQkvcHJvZHVjdHMvRGV2VG9vbHMKKwkJCQkvSGFyZHdhcmVfUGxhdGZvcm1zLmh0bWwKKwl2ZXJzYXRpbGUJCUFSTTkyNkVKLVMKKwl2ZXJzYXRpbGUJCUFSTTkyNkVKLVMKKwogRGF2ZSBQZXZlcmxleSA8ZHBldmVybGV5QG1wYy1kYXRhLmNvLnVrPgogCiAJb21hcDczMHAyCQlBUk05MjZFSlMKZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IDBmMGVjMjkuLjBlNGU3NDQgMTAwNzU1Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtNzUsMjIgKzc1LDIzIEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIExJU1RfNHh4PSIJXAotCWFjYWRpYQkJQURDSU9QCQlhbHByCQlBUDEwMDAJCVwKLQlBUjQwNQkJQVNINDA1CQliYW1ib28JCWJ1YmluZ2EJCVwKLQlDQU5CVAkJQ01TNzAwCQlDUENJMkRQCQlDUENJNDA1CQlcCi0JQ1BDSTQwNTIJQ1BDSTQwNUFCCUNQQ0k0MDVEVAlDUENJNDQwCQlcCi0JQ1BDSUlTRVI0CUNSQVlMMQkJY3NiMjcyCQljc2I0NzIJCVwKLQlEQVNBX1NJTQlEUDQwNQkJRFU0MDUJCWVib255CQlcCi0JRVJJQwkJRVhCSVRHRU4JRzIwMDAJCUhINDA1CQlcCi0JSFVCNDA1CQlKU0UJCUtBUkVGCQlrYXRtYWkJCVwKLQlsdWFuCQlNRVRST0JPWAlNSVA0MDUJCU1JUDQwNVQJCVwKLQlNTDIJCW1sMzAwCQlvY290ZWEJCU9DUlRDCQlcCi0JT1JTRwkJcDNwNDQwCQlQQ0k0MDUJCXBjczQ0MGVwCVwKLQlQSVA0MDUJCVBMVTQwNQkJUE1DNDA1CQlQUENoYW1lbGVvbkVWQglcCi0Jc2JjNDA1CQlzYzMJCXNlcXVvaWEJCXNlcXVvaWFfbmFuZAlcCi0JdGFpc2hhbgkJVk9INDA1CQlWT000MDUJCVc3T0xNQwkJXAotCVc3T0xNRwkJd2FsbnV0CQlXVUg0MDUJCVhQRURJVEUxSwlcCi0JeWVsbG93c3RvbmUJeW9zZW1pdGUJeXVjY2EJCQkJXAorCWFjYWRpYQkJYWNhZGlhX25hbmQJQURDSU9QCQlhbHByCQlcCisJQVAxMDAwCQlBUjQwNQkJQVNINDA1CQliYW1ib28JCVwKKwliYW1ib29fbmFuZAlidWJpbmdhCQlDQU5CVAkJQ01TNzAwCQlcCisJQ1BDSTJEUAkJQ1BDSTQwNQkJQ1BDSTQwNTIJQ1BDSTQwNUFCCVwKKwlDUENJNDA1RFQJQ1BDSTQ0MAkJQ1BDSUlTRVI0CUNSQVlMMQkJXAorCWNzYjI3MgkJY3NiNDcyCQlEQVNBX1NJTQlEUDQwNQkJXAorCURVNDA1CQllYm9ueQkJRVJJQwkJRVhCSVRHRU4JXAorCUcyMDAwCQlISDQwNQkJSFVCNDA1CQlKU0UJCVwKKwlLQVJFRgkJa2F0bWFpCQlsdWFuCQlNRVRST0JPWAlcCisJTUlQNDA1CQlNSVA0MDVUCQlNTDIJCW1sMzAwCQlcCisJb2NvdGVhCQlPQ1JUQwkJT1JTRwkJcDNwNDQwCQlcCisJUENJNDA1CQlwY3M0NDBlcAlQSVA0MDUJCVBMVTQwNQkJXAorCVBNQzQwNQkJUFBDaGFtZWxlb25FVkIJc2JjNDA1CQlzYzMJCVwKKwlzZXF1b2lhCQlzZXF1b2lhX25hbmQJdGFpc2hhbgkJVk9INDA1CQlcCisJVk9NNDA1CQlXN09MTUMJCVc3T0xNRwkJd2FsbnV0CQlcCisJV1VINDA1CQlYUEVESVRFMUsJeWVsbG93c3RvbmUJeW9zZW1pdGUJXAorCXl1Y2NhCQkJCQkJCQlcCiAiCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTEzMiw4ICsxMzMsOCBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBMSVNUXzgzeHg9IglcCi0JTVBDODMyWEVNRFMJTVBDODM0OUVNRFMJTVBDODM0OUlUWAlNUEM4MzQ5SVRYR1AJXAotCU1QQzgzNjBFTURTCXNiYzgzNDkJCVRRTTgzNHgJCQkJXAorCU1QQzgzMTNFUkRCCU1QQzgzMlhFTURTCU1QQzgzNDlFTURTCU1QQzgzNDlJVFgJXAorCU1QQzgzNDlJVFhHUAlNUEM4MzYwRU1EUwlzYmM4MzQ5CQlUUU04MzR4CQlcCiAiCiAKIApAQCAtMTQyLDEwICsxNDMsMTEgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogTElTVF84NXh4PSIJXAotCU1QQzg1NDBBRFMJTVBDODU0MEVWQUwJTVBDODU0MUNEUwlNUEM4NTQ4Q0RTCVwKLQlNUEM4NTU1Q0RTCU1QQzg1NjBBRFMJUE04NTQJCVBNODU2CQlcCi0Jc2JjODU0MAkJc2JjODU2MAkJc3R4Z3AzCQlUUU04NTQwCQlcCi0JVFFNODU0MQkJVFFNODU1NQkJVFFNODU2MAkJCQlcCisJTVBDODU0MEFEUwlNUEM4NTQwRVZBTAlNUEM4NTQxQ0RTCU1QQzg1NDREUwlcCisJTVBDODU0OENEUwlNUEM4NTU1Q0RTCU1QQzg1NjBBRFMJUE04NTQJCVwKKwlQTTg1NgkJc2JjODU0MAkJc2JjODU2MAkJc3R4Z3AzCQlcCisJc3R4c3NhCQlUUU04NTQwCQlUUU04NTQxCQlUUU04NTU1CQlcCisJVFFNODU2MAkJCQkJCQkJXAogIgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xODQsNyArMTg2LDcgQEAKIExJU1RfQVJNNz0iCVwKIAlhcm1hZGlsbG8JQjIJCWVwNzMxMgkJZXZiNDUxMAkJXAogCWltcGE3CQlpbnRlZ3JhdG9yYXAJYXA3CQlhcDcyMHQJCVwKLQlscGMyMjkyc29kaW1tCW1vZG5ldDUwCQkJCQlcCisJbHBjMjI5MnNvZGltbQltb2RuZXQ1MAlTTU40MgkJCQlcCiAiCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggOWEyN2JjMi4uZDVlMjIwYSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTE3Myw5ICsxNzMsNiBAQAogaWZlcSAoJChDUFUpLG1wYzg1eHgpCiBPQkpTICs9IGNwdS8kKENQVSkvcmVzZXR2ZWMubwogZW5kaWYKLWlmZXEgKCQoQ1BVKSxtcGM4Nnh4KQotT0JKUyArPSBjcHUvJChDUFUpL3Jlc2V0dmVjLm8KLWVuZGlmCiBpZmVxICgkKENQVSksYmY1MzMpCiBPQkpTICs9IGNwdS8kKENQVSkvc3RhcnQxLm8JY3B1LyQoQ1BVKS9pbnRlcnJ1cHQubwljcHUvJChDUFUpL2NhY2hlLm8KIE9CSlMgKz0gY3B1LyQoQ1BVKS9mbHVzaC5vCWNwdS8kKENQVSkvaW5pdF9zZHJhbS5vCkBAIC0xOTcsNiArMTk0LDkgQEAKIGlmZGVmIFNPQwogTElCUyArPSBjcHUvJChDUFUpLyQoU09DKS9saWIkKFNPQykuYQogZW5kaWYKK2lmZXEgKCQoQ1BVKSxpeHApCitMSUJTICs9IGNwdS9peHAvbnBlL2xpYm5wZS5hCitlbmRpZgogTElCUyArPSBsaWJfJChBUkNIKS9saWIkKEFSQ0gpLmEKIExJQlMgKz0gZnMvY3JhbWZzL2xpYmNyYW1mcy5hIGZzL2ZhdC9saWJmYXQuYSBmcy9mZG9zL2xpYmZkb3MuYSBmcy9qZmZzMi9saWJqZmZzMi5hIFwKIAlmcy9yZWlzZXJmcy9saWJyZWlzZXJmcy5hIGZzL2V4dDIvbGliZXh0MmZzLmEKQEAgLTIxOSw3ICsyMTksNyBAQAogTElCUyArPSAkKHNoZWxsIGlmIFsgLWQgcG9zdC9ib2FyZC8kKEJPQVJERElSKSBdOyB0aGVuIGVjaG8gXAogCSJwb3N0L2JvYXJkLyQoQk9BUkRESVIpL2xpYnBvc3QkKEJPQVJEKS5hIjsgZmkpCiBMSUJTICs9IGNvbW1vbi9saWJjb21tb24uYQotTElCUyArPSAkKEJPQVJETElCUykKK0xJQlMgKz0gbGliZmR0L2xpYmZkdC5hCiAKIExJQlMgOj0gJChhZGRwcmVmaXggJChvYmopLCQoTElCUykpCiAuUEhPTlkgOiAkKExJQlMpCkBAIC0xMDE0LDYgKzEwMTQsMTUgQEAKIGFjYWRpYV9jb25maWc6CXVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBhY2FkaWEgYW1jYwogCithY2FkaWFfbmFuZF9jb25maWc6CXVuY29uZmlnCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAbWtkaXIgLXAgJChvYmopbmFuZF9zcGwKKwlAbWtkaXIgLXAgJChvYmopYm9hcmQvYW1jYy9hY2FkaWEKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfTkFORF9VX0JPT1QiID4gJChvYmopaW5jbHVkZS9jb25maWcuaAorCUAkKE1LQ09ORklHKSAtbiAkQCAtYSBhY2FkaWEgcHBjIHBwYzR4eCBhY2FkaWEgYW1jYworCUBlY2hvICJURVhUX0JBU0UgPSAweDAxMDAwMDAwIiA+ICQob2JqKWJvYXJkL2FtY2MvYWNhZGlhL2NvbmZpZy50bXAKKwlAZWNobyAiQ09ORklHX05BTkRfVV9CT09UID0geSIgPj4gJChvYmopaW5jbHVkZS9jb25maWcubWsKKwogQURDSU9QX2NvbmZpZzoJdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGFkY2lvcCBlc2QKIApAQCAtMTAzNSw2ICsxMDQ0LDE1IEBACiBiYW1ib29fY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggYmFtYm9vIGFtY2MKIAorYmFtYm9vX25hbmRfY29uZmlnOgl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQG1rZGlyIC1wICQob2JqKW5hbmRfc3BsCisJQG1rZGlyIC1wICQob2JqKWJvYXJkL2FtY2MvYmFtYm9vCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX05BTkRfVV9CT09UIiA+ICQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAJChNS0NPTkZJRykgLW4gJEAgLWEgYmFtYm9vIHBwYyBwcGM0eHggYmFtYm9vIGFtY2MKKwlAZWNobyAiVEVYVF9CQVNFID0gMHgwMTAwMDAwMCIgPiAkKG9iailib2FyZC9hbWNjL2JhbWJvby9jb25maWcudG1wCisJQGVjaG8gIkNPTkZJR19OQU5EX1VfQk9PVCA9IHkiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLm1rCisKIGJ1YmluZ2FfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggYnViaW5nYSBhbWNjCiAKQEAgLTE2MjMsNiArMTY0MSwxOSBAQAogIyMgTVBDODN4eCBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKK01QQzgzMTNFUkRCXzMzX2NvbmZpZyBcCitNUEM4MzEzRVJEQl82Nl9jb25maWc6IHVuY29uZmlnCisJQGVjaG8gIiIgPmluY2x1ZGUvY29uZmlnLmggOyBcCisJaWYgWyAiJChmaW5kc3RyaW5nIF8zM18sJEApIiBdIDsgdGhlbiBcCisJCWVjaG8gLW4gIi4uLjMzTSAuLi4iIDsgXAorCQllY2hvICIjZGVmaW5lIENGR18zM01IWiIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCWZpIDsgXAorCWlmIFsgIiQoZmluZHN0cmluZyBfNjZfLCRAKSIgXSA7IHRoZW4gXAorCQllY2hvIC1uICIuLi42Nk0uLi4iIDsgXAorCQllY2hvICIjZGVmaW5lIENGR182Nk1IWiIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCWZpIDsKKwlAJChNS0NPTkZJRykgLWEgTVBDODMxM0VSREIgcHBjIG1wYzgzeHggbXBjODMxM2VyZGIKKwogTVBDODMyWEVNRFNfY29uZmlnIFwKIE1QQzgzMlhFTURTX0hPU1RfMzNfY29uZmlnIFwKIE1QQzgzMlhFTURTX0hPU1RfNjZfY29uZmlnIFwKQEAgLTE3MjksMTIgKzE3NjAsMTggQEAKIE1QQzg1NDFDRFNfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IG1wYzg1NDFjZHMgY2RzCiAKK01QQzg1NDREU19jb25maWc6CXVuY29uZmlnCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggbXBjODU0NGRzIGZyZWVzY2FsZQorCiBNUEM4NTQ4Q0RTX2NvbmZpZzoJdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBtcGM4NTQ4Y2RzIGNkcwogCiBNUEM4NTU1Q0RTX2NvbmZpZzoJdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBtcGM4NTU1Y2RzIGNkcwogCitNUEM4NTY4TURTX2NvbmZpZzoJdW5jb25maWcKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBtcGM4NTY4bWRzCisKIFBNODU0X2NvbmZpZzoJdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBwbTg1NAogCkBAIC0xNzcwLDYgKzE4MDcsMTcgQEAKIHN0eGdwM19jb25maWc6CQl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IHN0eGdwMwogCitzdHhzc2FfY29uZmlnCQlcCitzdHhzc2FfNE1fY29uZmlnOgl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQGlmIFsgIiQoZmluZHN0cmluZyBfNE1fLCRAKSIgXSA7IHRoZW4gXAorCQllY2hvICIjZGVmaW5lIENPTkZJR19TVFhTU0FfNE0iID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiLi4uIHdpdGggNCBNaUIgZmxhc2ggbWVtb3J5IiA7IFwKKwllbHNlIFwKKwkJPiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCisJZmkKKwlAJChNS0NPTkZJRykgLWEgc3R4c3NhIHBwYyBtcGM4NXh4IHN0eHNzYQorCiBUUU04NTQwX2NvbmZpZwkJXAogVFFNODU0MV9jb25maWcJCVwKIFRRTTg1NTVfY29uZmlnCQlcCkBAIC0yMDg4LDcgKzIxMzYsMTAgQEAKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtNzIwdCBldmI0NTEwCiAKIGxwYzIyOTJzb2RpbW1fY29uZmlnOgl1bmNvbmZpZwotCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm03MjB0IGxwYzIyOTJzb2RpbW0KKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtNzIwdCBscGMyMjkyc29kaW1tIE5VTEwgbHBjMjI5MgorCitTTU40Ml9jb25maWcJOgl1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm03MjB0IFNNTjQyIHNpZW1lbnMgbHBjMjI5MgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBYU2NhbGUgU3lzdGVtcwpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDkwZWYyYzIuLmJiNWI0NmUgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTcxOCw2ICs3MTgsNyBAQAogCQlDRkdfQ01EX1ZGRAkqIFZGRCBzdXBwb3J0IChUUkFCKQogCQlDRkdfQ01EX0JTUAkqIEJvYXJkIFNQZWNpZmljIGZ1bmN0aW9ucwogCQlDRkdfQ01EX0NEUAkqIENpc2NvIERpc2NvdmVyIFByb3RvY29sIHN1cHBvcnQKKwkJQ0ZHX0NNRF9GU0wJKiBNaWNyb2JsYXplIEZTTCBzdXBwb3J0CiAJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCUNGR19DTURfQUxMCWFsbAogCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2FjYWRpYS9NYWtlZmlsZSBiL2JvYXJkL2FtY2MvYWNhZGlhL01ha2VmaWxlCmluZGV4IGFiY2JmM2UuLmRkYmNiODAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MvYWNhZGlhL01ha2VmaWxlCisrKyBiL2JvYXJkL2FtY2MvYWNhZGlhL01ha2VmaWxlCkBAIC0yNSw3ICsyNSw3IEBACiAKIExJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotQ09CSlMJPSAkKEJPQVJEKS5vIGNwci5vIG1lbW9yeS5vCitDT0JKUwk9ICQoQk9BUkQpLm8gY21kX2FjYWRpYS5vIGNwci5vIG1lbW9yeS5vCiBTT0JKUwk9CiAKIFNSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvYWNhZGlhL2FjYWRpYS5jIGIvYm9hcmQvYW1jYy9hY2FkaWEvYWNhZGlhLmMKaW5kZXggYmFmNTk4Yy4uNDZkNjNlNiAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy9hY2FkaWEvYWNhZGlhLmMKKysrIGIvYm9hcmQvYW1jYy9hY2FkaWEvYWNhZGlhLmMKQEAgLTYyLDYgKzYyLDE2IEBACiAKIAlhY2FkaWFfZ3Bpb19pbml0KCk7CiAKKwkvKiBDb25maWd1cmUgNDA1RVogZm9yIE5BTkQgdXNhZ2UgKi8KKwltdHNkcihzZHJuYW5kMCwgU0RSX05BTkQwX05ERU4gfCBTRFJfTkFORDBfTkRBUkVOIHwgU0RSX05BTkQwX05EUkJFTik7CisJbWZzZHIoc2RydWx0cmEwLCByZWcpOworCXJlZyAmPSB+U0RSX1VMVFJBMF9DU05fTUFTSzsKKwlyZWcgfD0gKFNEUl9VTFRSQTBfQ1NOU0VMMCA+PiBDRkdfTkFORF9DUykgfAorCQlTRFJfVUxUUkEwX05ER1BJT0JQIHwKKwkJU0RSX1VMVFJBMF9FQkNSRFlFTiB8CisJCVNEUl9VTFRSQTBfTkZTUlNURU47CisJbXRzZHIoc2RydWx0cmEwLCByZWcpOworCiAJLyogVVNCIEhvc3QgY29yZSBuZWVkcyB0aGlzIGJpdCBzZXQgKi8KIAltZnNkcihzZHJ1bHRyYTEsIHJlZyk7CiAJbXRzZHIoc2RydWx0cmExLCByZWcgfCBTRFJfVUxUUkExX0xFRE5FTkFCTEUpOwpAQCAtOTEsOCArMTAxLDExIEBACiBpbnQgY2hlY2tib2FyZCh2b2lkKQogewogCWNoYXIgKnMgPSBnZXRlbnYoInNlcmlhbCMiKTsKKwl1OCByZXY7CisKKwlyZXYgPSBpbjgoQ0ZHX0NQTERfQkFTRSArIDApOworCXByaW50ZigiQm9hcmQ6IEFjYWRpYSAtIEFNQ0MgUFBDNDA1RVogRXZhbHVhdGlvbiBCb2FyZCwgUmV2LiAlWCIsIHJldik7CiAKLQlwcmludGYoIkJvYXJkOiBBY2FkaWEgLSBBTUNDIFBQQzQwNUVaIEV2YWx1YXRpb24gQm9hcmQiKTsKIAlpZiAocyAhPSBOVUxMKSB7CiAJCXB1dHMoIiwgc2VyaWFsIyAiKTsKIAkJcHV0cyhzKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvYWNhZGlhL2NtZF9hY2FkaWEuYyBiL2JvYXJkL2FtY2MvYWNhZGlhL2NtZF9hY2FkaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjdlYTM1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvYW1jYy9hY2FkaWEvY21kX2FjYWRpYS5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA3CisgKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8aTJjLmg+CisKK3N0YXRpYyB1OCBib290XzI2N19ub3JbXSA9IHsKKwkweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhlLCAweDAwLAorCTB4MTQsIDB4YzAsIDB4MzYsIDB4Y2MsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIHU4IGJvb3RfMjY3X25hbmRbXSA9IHsKKwkweGQwLCAweDM4LCAweGMzLCAweDUwLCAweDEzLCAweDg4LCAweDhlLCAweDAwLAorCTB4MTQsIDB4YzAsIDB4MzYsIDB4Y2MsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIGludCBkb19ib290c3RyYXAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdTggY2hpcDsKKwl1OCAqYnVmOworCWludCBjcHVfZnJlcTsKKworCWlmIChhcmdjIDwgMykgeworCQlwcmludGYoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7CisJCXJldHVybiAxOworCX0KKworCWNwdV9mcmVxID0gc2ltcGxlX3N0cnRvbChhcmd2WzFdLCBOVUxMLCAxMCk7CisJaWYgKGNwdV9mcmVxICE9IDI2NykgeworCQlwcmludGYoIlVuc3VwcG9ydGVkIGNwdS1mcmVxdWVuY3kgLSBvbmx5IDI2NyBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiB1c2UgMHg1MCBhcyBJMkMgRUVQUk9NIGFkZHJlc3MgZm9yIG5vdyAqLworCWNoaXAgPSAweDUwOworCisJaWYgKChzdHJjbXAoYXJndlsyXSwgIm5vciIpICE9IDApICYmCisJICAgIChzdHJjbXAoYXJndlsyXSwgIm5hbmQiKSAhPSAwKSkgeworCQlwcmludGYoIlVuc3VwcG9ydGVkIGJvb3QtZGV2aWNlIC0gb25seSBub3J8bmFuZCBzdXBwb3J0XG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHN0cmNtcChhcmd2WzJdLCAibmFuZCIpID09IDApIHsKKwkJc3dpdGNoIChjcHVfZnJlcSkgeworCQljYXNlIDI2NzoKKwkJCWJ1ZiA9IGJvb3RfMjY3X25hbmQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChjcHVfZnJlcSkgeworCQljYXNlIDI2NzoKKwkJCWJ1ZiA9IGJvb3RfMjY3X25vcjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaTJjX3dyaXRlKGNoaXAsIDAsIDEsIGJ1ZiwgMTYpICE9IDApCisJCXByaW50ZigiRXJyb3Igd3JpdGluZyB0byBFRVBST00gYXQgYWRkcmVzcyAweCV4XG4iLCBjaGlwKTsKKwl1ZGVsYXkoQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TICogMTAwMCk7CisJaWYgKGkyY193cml0ZShjaGlwLCAweDEwLCAxLCBidWYrMTYsIDQpICE9IDApCisJCXByaW50ZigiRXJyb3IyIHdyaXRpbmcgdG8gRUVQUk9NIGF0IGFkZHJlc3MgMHgleFxuIiwgY2hpcCk7CisKKwlwcmludGYoIkRvbmVcbiIpOworCXByaW50ZigiUGxlYXNlIHBvd2VyLWN5Y2xlIHRoZSBib2FyZCBmb3IgdGhlIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3RcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK1VfQk9PVF9DTUQoCisJYm9vdHN0cmFwLAkzLAkwLAlkb19ib290c3RyYXAsCisJImJvb3RzdHJhcCAtIHByb2dyYW0gdGhlIEkyQyBib290c3RyYXAgRUVQUk9NXG4iLAorCSI8Y3B1LWZyZXE+IDxub3J8bmFuZD4gLSBwcm9ncmFtIHRoZSBJMkMgYm9vdHN0cmFwIEVFUFJPTVxuIgorCSk7CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2FjYWRpYS9jb25maWcubWsgYi9ib2FyZC9hbWNjL2FjYWRpYS9jb25maWcubWsKaW5kZXggYzg1NjZlYy4uYWY1YTQ2YyAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy9hY2FkaWEvY29uZmlnLm1rCisrKyBiL2JvYXJkL2FtY2MvYWNhZGlhL2NvbmZpZy5tawpAQCAtMjEsNiArMjEsMTIgQEAKICMgTUEgMDIxMTEtMTMwNyBVU0EKICMKIAorIworIyBBTUNDIDQwNUVaIFJlZmVyZW5jZSBQbGF0Zm9ybSAoQWNhZGlhKSBib2FyZAorIworCitzaW5jbHVkZSAkKE9CSlRSRUUpL2JvYXJkLyQoQk9BUkRESVIpL2NvbmZpZy50bXAKKwogaWZuZGVmIFRFWFRfQkFTRQogVEVYVF9CQVNFID0gMHhGRkZDMDAwMAogZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvYWNhZGlhL21lbW9yeS5jIGIvYm9hcmQvYW1jYy9hY2FkaWEvbWVtb3J5LmMKaW5kZXggNTM3NWQzNi4uMjU5MDRkMyAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy9hY2FkaWEvbWVtb3J5LmMKKysrIGIvYm9hcmQvYW1jYy9hY2FkaWEvbWVtb3J5LmMKQEAgLTM5LDYgKzM5LDcgQEAKIAlyZXR1cm47CiB9CiAKKyNpZiAhZGVmaW5lZChDT05GSUdfTkFORF9VX0JPT1QpIHx8IGRlZmluZWQoQ09ORklHX05BTkRfU1BMKQogc3RhdGljIHZvaWQgY3JhbV9iY3Jfd3JpdGUodTMyIHdyX3ZhbCkKIHsKIAl3cl92YWwgPDw9IDI7CkBAIC02Miw5ICs2MywxMiBAQAogCiAJcmV0dXJuOwogfQorI2VuZGlmCiAKIGxvbmcgaW50IGluaXRkcmFtKGludCBib2FyZF90eXBlKQogeworI2lmICFkZWZpbmVkKENPTkZJR19OQU5EX1VfQk9PVCkgfHwgZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisJaW50IGk7CiAJdTMyIHZhbDsKIAogCS8qIDEuIEVCQyBuZWVkIHRvIHByb2dyYW0gUkVBRFksIENMSywgQURWIGZvciBBU3luYyBtb2RlICovCkBAIC05Miw3ICs5NiwxMiBAQAogCiAJLyogQ29uZmlnIEVCQyB0byB1c2UgUkRZICovCiAJbWZzZHIoc2RydWx0cmEwLCB2YWwpOwotCW10c2RyKHNkcnVsdHJhMCwgdmFsIHwgMHgwNDAwMDAwMCk7CisJbXRzZHIoc2RydWx0cmEwLCB2YWwgfCBTRFJfVUxUUkEwX0VCQ1JEWUVOKTsKKworCS8qIFdhaXQgYSBzaG9ydCB3aGlsZSwgc2luY2UgZm9yIE5BTkQgYm9vdGluZyB0aGlzIGlzIHRvbyBmYXN0ICovCisJZm9yIChpPTA7IGk8MjAwMDAwOyBpKyspCisJCTsKKyNlbmRpZgogCiAJcmV0dXJuIChDRkdfTUJZVEVTX1JBTSA8PCAyMCk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2FjYWRpYS91LWJvb3QtbmFuZC5sZHMgYi9ib2FyZC9hbWNjL2FjYWRpYS91LWJvb3QtbmFuZC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkYWUwZQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2FtY2MvYWNhZGlhL3UtYm9vdC1uYW5kLmxkcwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9ICsgU0laRU9GX0hFQURFUlM7CisgIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQorICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KKyAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KKyAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KKyAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQorICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KSAJfQorICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9CisgIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpIAl9CisgIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKSAJfQorICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpIAl9CisgIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQorICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9CisgIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KKyAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KKyAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQorICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQorICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KKyAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQorICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KKyAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQorICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQorICAucGx0IDogeyAqKC5wbHQpIH0KKyAgLnRleHQgICAgICA6CisgIHsKKyAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCisgICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCisKKyAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQorCisgICAgLyogQWxpZ24gdG8gbmV4dCBOQU5EIGJsb2NrICovCisgICAgLiA9IEFMSUdOKDB4NDAwMCk7CisgICAgY29tbW9uL2Vudmlyb25tZW50Lm8gICgucHBjZW52KQorICAgIC8qIEtlZXAgc29tZSBzcGFjZSBoZXJlIGZvciByZWR1bmRhbnQgZW52IGFuZCBwb3RlbnRpYWwgYmFkIGVudiBibG9ja3MgKi8KKyAgICAuID0gQUxJR04oMHgxMDAwMCk7CisKKyAgICAqKC50ZXh0KQorICAgICooLmZpeHVwKQorICAgICooLmdvdDEpCisgIH0KKyAgX2V0ZXh0ID0gLjsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICA6CisgIHsKKyAgICAqKC5yb2RhdGEpCisgICAgKigucm9kYXRhMSkKKyAgICAqKC5yb2RhdGEuc3RyMS40KQorICB9CisgIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKKyAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQorICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9CisKKyAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCisgIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOworICBfZXJvdGV4dCA9IC47CisgIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKKyAgLnJlbG9jICAgOgorICB7CisgICAgKiguZ290KQorICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgKiguZ290MikKKyAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAqKC5maXh1cCkKKyAgfQorICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7CisgIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7CisKKyAgLmRhdGEgICAgOgorICB7CisgICAgKiguZGF0YSkKKyAgICAqKC5kYXRhMSkKKyAgICAqKC5zZGF0YSkKKyAgICAqKC5zZGF0YTIpCisgICAgKiguZHluYW1pYykKKyAgICBDT05TVFJVQ1RPUlMKKyAgfQorICBfZWRhdGEgID0gIC47CisgIFBST1ZJREUgKGVkYXRhID0gLik7CisKKyAgLiA9IC47CisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKKyAgLiA9IC47CisgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CisgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQorICBfX3N0b3BfX19leF90YWJsZSA9IC47CisKKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9iZWdpbiA9IC47CisgIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQorICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcyAgICAgICA6CisgIHsKKyAgICooLnNic3MpICooLnNjb21tb24pCisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgfQorCisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2JhbWJvby9NYWtlZmlsZSBiL2JvYXJkL2FtY2MvYmFtYm9vL01ha2VmaWxlCmluZGV4IDVkYTk2ZTkuLmQwMWNjNDkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MvYmFtYm9vL01ha2VmaWxlCisrKyBiL2JvYXJkL2FtY2MvYmFtYm9vL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDItMjAwNgorIyAoQykgQ29weXJpZ2h0IDIwMDItMjAwNwogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMzMsNyArMzMsNyBAQAogU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9iYW1ib28vYmFtYm9vLmMgYi9ib2FyZC9hbWNjL2JhbWJvby9iYW1ib28uYwppbmRleCBiNWJiMTQ1Li4yZTY1MWRmIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL2JhbWJvby9iYW1ib28uYworKysgYi9ib2FyZC9hbWNjL2JhbWJvby9iYW1ib28uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDUKKyAqIChDKSBDb3B5cmlnaHQgMjAwNS0yMDA3CiAgKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTI3Nyw4NyArMjc3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCi0jaW5jbHVkZSA8bGludXgvbXRkL25hbmRfbGVnYWN5Lmg+Ci1leHRlcm4gc3RydWN0IG5hbmRfY2hpcCBuYW5kX2Rldl9kZXNjW0NGR19NQVhfTkFORF9ERVZJQ0VdOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgbmFuZF9yZXNldC4KLSAgfCAgIFJlc2V0IE5hbmQgZmxhc2gKLSAgfCAgIFRoaXMgcm91dGluZSB3aWxsIGFib3J0IHByZXZpb3VzIGNtZAotICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgbmFuZF9yZXNldCh1bG9uZyBhZGRyKQotewotCWludCB3YWl0PTAsIHN0YXQ9MDsKLQotCW91dDgoYWRkciArIE5BTkRfQ01EX1JFRywgTkFORDBfQ01EX1JFU0VUKTsKLQlvdXQ4KGFkZHIgKyBOQU5EX0NNRF9SRUcsIE5BTkQwX0NNRF9SRUFEX1NUQVRVUyk7Ci0KLQl3aGlsZSAoKHN0YXQgIT0gMHhjMCkgJiYgKHdhaXQgIT0gMHhmZmZmKSkgewotCQlzdGF0ID0gaW44KGFkZHIgKyBOQU5EX0RBVEFfUkVHKTsKLQkJd2FpdCsrOwotCX0KLQotCWlmIChzdGF0ID09IDB4YzApIHsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmKCJOQU5EIFJlc2V0IHRpbWVvdXQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLX0KLQotdm9pZCBib2FyZF9uYW5kX3NldF9kZXZpY2UoaW50IGNzLCB1bG9uZyBhZGRyKQotewotCS8qIFNldCBOYW5kRmxhc2ggQ29yZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0Jb3V0MzIoYWRkciArIE5BTkRfQ0NSX1JFRywgMHgwMDAwMTAwMCB8IChjcyA8PCAyNCkpOwotCi0Jc3dpdGNoIChjcykgewotCWNhc2UgMToKLQkJLyogLS0tLS0tLQotCQkgKiAgTkFORDAKLQkJICogLS0tLS0tLQotCQkgKiBLOUYxMjA4VTBBIDogNCBhZGRyIGN5YywgMSBjb2wgKyAzIFJvdwotCQkgKiBTZXQgTkRGMUNSIC0gRW5hYmxlIEV4dGVybmFsIENTMSBpbiBOQU5EIEZMQVNIIGNvbnRyb2xsZXIKLQkJICovCi0JCW91dDMyKGFkZHIgKyBOQU5EX0NSMV9SRUcsIDB4ODAwMDIyMjIpOwotCQlicmVhazsKLQotCWNhc2UgMjoKLQkJLyogLS0tLS0tLQotCQkgKiAgTkFORDEKLQkJICogLS0tLS0tLQotCQkgKiBLOUsyRzBCIDogNSBhZGRyIGN5YywgMiBjb2wgKyAzIFJvdwotCQkgKiBTZXQgTkRGMkNSIDogRW5hYmxlIEV4dGVybmFsIENTMiBpbiBOQU5EIEZMQVNIIGNvbnRyb2xsZXIKLQkJICovCi0JCW91dDMyKGFkZHIgKyBOQU5EX0NSMl9SRUcsIDB4QzAwMDc3NzcpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBQZXJmb3JtIFJlc2V0IENvbW1hbmQgKi8KLQlpZiAobmFuZF9yZXNldChhZGRyKSAhPSAwKQotCQlyZXR1cm47Ci19Ci0KLXZvaWQgbmFuZF9pbml0KHZvaWQpCi17Ci0JYm9hcmRfbmFuZF9zZXRfZGV2aWNlKDEsIENGR19OQU5EX0FERFIpOwotCi0JbmFuZF9wcm9iZShDRkdfTkFORF9BRERSKTsKLQlpZiAobmFuZF9kZXZfZGVzY1swXS5DaGlwSUQgIT0gTkFORF9DaGlwSURfVU5LTk9XTikgewotCQlwcmludF9zaXplKG5hbmRfZGV2X2Rlc2NbMF0udG90bGVuLCAiXG4iKTsKLQl9Ci0KLSNpZiAwIC8qIE5BTkQxIG5vdCBzdXBwb3J0ZWQgeWV0ICovCi0JYm9hcmRfbmFuZF9zZXRfZGV2aWNlKDIsIENGR19OQU5EMl9BRERSKTsKLQotCW5hbmRfcHJvYmUoQ0ZHX05BTkQyX0FERFIpOwotCWlmIChuYW5kX2Rldl9kZXNjWzBdLkNoaXBJRCAhPSBOQU5EX0NoaXBJRF9VTktOT1dOKSB7Ci0JCXByaW50X3NpemUobmFuZF9kZXZfZGVzY1swXS50b3RsZW4sICJcbiIpOwotCX0KLSNlbmRpZgotfQotI2VuZGlmIC8qIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpICovCi0KIGludCBjaGVja2JvYXJkKHZvaWQpCiB7CiAJY2hhciAqcyA9IGdldGVudigic2VyaWFsIyIpOwpAQCAtMzcyLDYgKzI5MSw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAorI2lmICEoZGVmaW5lZChDT05GSUdfTkFORF9VX0JPT1QpIHx8IGRlZmluZWQoQ09ORklHX05BTkRfU1BMKSkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogaW5pdF9zcGRfYXJyYXkgLS0gQmFtYm9vIGhhcyBvbmUgYmFuayBvbmJvYXJkIHNkcmFtIChwbHVzIERJTU0pCkBAIC00MjYsMTAgKzM0NiwxMiBAQAogCWNmZ19zaW11bGF0ZV9zcGRfZWVwcm9tWzI1XSAgICA9IDB4MDA7ICAgIC8qIFNEUkFNIEN5Y2xlIFRpbWUgKGNhcyBsYXRlbmN5IDEuNSkgPSBOLkEgKi8KIAljZmdfc2ltdWxhdGVfc3BkX2VlcHJvbVsxMl0gICAgPSAweDgyOyAgICAvKiByZWZyZXNoIFJhdGUgVHlwZTogTm9ybWFsICgxNS42MjV1cykgKyBTZWxmIHJlZnJlc2ggKi8KIH0KKyNlbmRpZgogCiBsb25nIGludCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCiB7Ci0JbG9uZyBkcmFtX3NpemUgPSAwOworI2lmICEoZGVmaW5lZChDT05GSUdfTkFORF9VX0JPT1QpIHx8IGRlZmluZWQoQ09ORklHX05BTkRfU1BMKSkKKwlsb25nIGRyYW1fc2l6ZTsKIAogCS8qCiAJICogRmlyc3Qgd3JpdGUgc2ltdWxhdGVkIHZhbHVlcyBpbiBlZXByb20gYXJyYXkgZm9yIG9uYm9hcmQgYmFuayAwCkBAIC00MzksNiArMzYxLDkgQEAKIAlkcmFtX3NpemUgPSBzcGRfc2RyYW0oKTsKIAogCXJldHVybiBkcmFtX3NpemU7CisjZWxzZQorCXJldHVybiBDRkdfTUJZVEVTX1NEUkFNIDw8IDIwOworI2VuZGlmCiB9CiAKICNpZiBkZWZpbmVkKENGR19EUkFNX1RFU1QpCkBAIC05NjIsMTEgKzg4NywxMSBAQAogCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAljYXNlIEJPT1RfRlJPTV9OQU5EX0ZMQVNIMDoKIAkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JCWViYzBfY3MwX2JuYXBfdmFsdWUgPSAwOwotCQllYmMwX2NzMF9ibmNyX3ZhbHVlID0gMDsKKwkJZWJjMF9jczBfYm5hcF92YWx1ZSA9IEVCQzBfQk5BUF9OQU5EX0ZMQVNIOworCQllYmMwX2NzMF9ibmNyX3ZhbHVlID0gRUJDMF9CTkNSX05BTkRfRkxBU0hfQ1MxOwogCi0JCWViYzBfY3MxX2JuYXBfdmFsdWUgPSBFQkMwX0JOQVBfTkFORF9GTEFTSDsKLQkJZWJjMF9jczFfYm5jcl92YWx1ZSA9IEVCQzBfQk5DUl9OQU5EX0ZMQVNIX0NTMTsKKwkJZWJjMF9jczFfYm5hcF92YWx1ZSA9IDA7CisJCWViYzBfY3MxX2JuY3JfdmFsdWUgPSAwOwogCQllYmMwX2NzMl9ibmFwX3ZhbHVlID0gMDsKIAkJZWJjMF9jczJfYm5jcl92YWx1ZSA9IDA7CiAJCWViYzBfY3MzX2JuYXBfdmFsdWUgPSAwOwpAQCAtMTQ5MCwxMCArMTQxNSwxMCBAQAogCWdwaW9fdGFiW0dQSU8wXVs2XS5pbl9vdXQgPSBHUElPX09VVDsJICAgIC8qIEVCQ19DU19OKDEpICovCiAJZ3Bpb190YWJbR1BJTzBdWzZdLmFsdF9uYiA9IEdQSU9fQUxUMTsKIAotI2lmIDAKIAlncGlvX3RhYltHUElPMF1bN10uaW5fb3V0ID0gR1BJT19PVVQ7CSAgICAvKiBFQkNfQ1NfTigyKSAqLwogCWdwaW9fdGFiW0dQSU8wXVs3XS5hbHRfbmIgPSBHUElPX0FMVDE7CiAKKyNpZiAwCiAJZ3Bpb190YWJbR1BJTzBdWzddLmluX291dCA9IEdQSU9fT1VUOwkgICAgLyogRUJDX0NTX04oMykgKi8KIAlncGlvX3RhYltHUElPMF1bN10uYWx0X25iID0gR1BJT19BTFQxOwogI2VuZGlmCkBAIC0xOTgxLDEyICsxOTA2LDIxIEBACiAJewogCQl1cGRhdGVfbmRmY19pb3MoKTsKIAorI2lmICEoZGVmaW5lZChDT05GSUdfTkFORF9VX0JPT1QpIHx8IGRlZmluZWQoQ09ORklHX05BTkRfU1BMKSkKIAkJbXRzZHIoc2RyX2N1c3QwLCBTRFIwX0NVU1QwX01VWF9OREZDX1NFTCAgIHwKIAkJICAgICAgU0RSMF9DVVNUMF9OREZDX0VOQUJMRQl8CiAJCSAgICAgIFNEUjBfQ1VTVDBfTkRGQ19CV184X0JJVAl8CiAJCSAgICAgIFNEUjBfQ1VTVDBfTkRGQ19BUkVfTUFTSwl8CiAJCSAgICAgIFNEUjBfQ1VTVDBfQ0hJUFNFTEdBVF9FTjEgfAogCQkgICAgICBTRFIwX0NVU1QwX0NISVBTRUxHQVRfRU4yKTsKKyNlbHNlCisJCW10c2RyKHNkcl9jdXN0MCwgU0RSMF9DVVNUMF9NVVhfTkRGQ19TRUwgICB8CisJCSAgICAgIFNEUjBfQ1VTVDBfTkRGQ19FTkFCTEUJfAorCQkgICAgICBTRFIwX0NVU1QwX05ERkNfQldfOF9CSVQJfAorCQkgICAgICBTRFIwX0NVU1QwX05ERkNfQVJFX01BU0sJfAorCQkgICAgICBTRFIwX0NVU1QwX0NISVBTRUxHQVRfRU4wIHwKKwkJICAgICAgU0RSMF9DVVNUMF9DSElQU0VMR0FUX0VOMik7CisjZW5kaWYKIAogCQluZGZjX3NlbGVjdGlvbl9pbl9mcGdhKCk7CiAJfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9iYW1ib28vY29uZmlnLm1rIGIvYm9hcmQvYW1jYy9iYW1ib28vY29uZmlnLm1rCmluZGV4IDlkN2Y0YzMuLmI0NjUyN2QgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MvYmFtYm9vL2NvbmZpZy5taworKysgYi9ib2FyZC9hbWNjL2JhbWJvby9jb25maWcubWsKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMi0yMDA2CisjIChDKSBDb3B5cmlnaHQgMjAwMi0yMDA3CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMSw3ICsyMSwxMSBAQAogIyBNQSAwMjExMS0xMzA3IFVTQQogIwogCitzaW5jbHVkZSAkKE9CSlRSRUUpL2JvYXJkLyQoQk9BUkRESVIpL2NvbmZpZy50bXAKKworaWZuZGVmIFRFWFRfQkFTRQogVEVYVF9CQVNFID0gMHhGRkZBMDAwMAorZW5kaWYKIAogUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfNDQwPTEKIApkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9iYW1ib28vZmxhc2guYyBiL2JvYXJkL2FtY2MvYmFtYm9vL2ZsYXNoLmMKaW5kZXggYTMwYWI3YS4uOGEyZTgzMiAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy9iYW1ib28vZmxhc2guYworKysgYi9ib2FyZC9hbWNjL2JhbWJvby9mbGFzaC5jCkBAIC01Myw3ICs1Myw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmbGFzaF9hZGRyX3RhYmxlW11bQ0ZHX01BWF9GTEFTSF9CQU5LU10gPSB7CiAJezB4ODc4MDAwMDEsIDB4RkZGMDAwMDAsIDB4RkZGODAwMDB9LCAvKiAwOmJvb3QgZnJvbSBzbWFsbCBmbGFzaCAqLwogCXsweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwgLyogMTpib290IGZyb20gcGNpIDY2ICAgICAgKi8KLQl7MHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sIC8qIDI6Ym9vdCBmcm9tIG5hbmQgZmxhc2ggICovCisJezB4ODc4MDAwMDEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LCAvKiAwOmJvb3QgZnJvbSBuYW5kIGZsYXNoICAqLwogCXsweDg3RjAwMDAwLCAweDg3RjgwMDAwLCAweEZGQzAwMDAxfSwgLyogMzpib290IGZyb20gYmlnIGZsYXNoIDMzKi8KIAl7MHg4N0YwMDAwMCwgMHg4N0Y4MDAwMCwgMHhGRkMwMDAwMX0sIC8qIDQ6Ym9vdCBmcm9tIGJpZyBmbGFzaCA2NiovCiAJezB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LCAvKiA1OmJvb3QgZnJvbSAgICAgICAgICAgICAqLwpAQCAtMTM0LDEwICsxMzQsMTAgQEAKIAkJZmxhc2hfaW5mb1tpXS5zaXplID0gMDsKIAogCQkvKiBjaGVjayB3aGV0aGVyIHRoZSBhZGRyZXNzIGlzIDAgKi8KLQkJaWYgKGZsYXNoX2FkZHJfdGFibGVbaW5kZXhdW2ldID09IDApIHsKKwkJaWYgKGZsYXNoX2FkZHJfdGFibGVbaW5kZXhdW2ldID09IDApCiAJCQljb250aW51ZTsKLQkJfQogCisJCURFQlVHRigiRGV0ZWN0aW9uIGJhbmsgJWQuLi5cbiIsIGkpOwogCQkvKiBjYWxsIGZsYXNoX2dldF9zaXplKCkgdG8gaW5pdGlhbGl6ZSBzZWN0b3IgYWRkcmVzcyAqLwogCQlzaXplX2JbaV0gPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKSBmbGFzaF9hZGRyX3RhYmxlW2luZGV4XVtpXSwKIAkJCQkgICAmZmxhc2hfaW5mb1tpXSk7CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2JhbWJvby9pbml0LlMgYi9ib2FyZC9hbWNjL2JhbWJvby9pbml0LlMKaW5kZXggNzgyMDEwNy4uMTQ1OWVlYyAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy9iYW1ib28vaW5pdC5TCisrKyBiL2JvYXJkL2FtY2MvYmFtYm9vL2luaXQuUwpAQCAtMSw3NCArMSwzMSBAQAogLyoKLSoKLSogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSogcHJvamVjdC4KLSoKLSogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSoKLSogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0qIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0qIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKLSogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSoKLSogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSogTUEgMDIxMTEtMTMwNyBVU0EKLSovCisgKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIFNjb3R0IE1jTnV0dCA8c21jbnV0dEBhcnRlc3luY3AuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCiAKICNpbmNsdWRlIDxwcGNfYXNtLnRtcGw+CiAjaW5jbHVkZSA8Y29uZmlnLmg+Ci0KLS8qIEdlbmVyYWwgKi8KLSNkZWZpbmUgVExCX1ZBTElEICAgMHgwMDAwMDIwMAotCi0vKiBTdXBwb3J0ZWQgcGFnZSBzaXplcyAqLwotCi0jZGVmaW5lIFNaXzFLCSAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFNaXzRLCSAgICAweDAwMDAwMDEwCi0jZGVmaW5lIFNaXzE2SwkgICAgMHgwMDAwMDAyMAotI2RlZmluZSBTWl82NEsJICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgU1pfMjU2SwkgICAgMHgwMDAwMDA0MAotI2RlZmluZSBTWl8xTQkgICAgMHgwMDAwMDA1MAotI2RlZmluZSBTWl84TSAgICAgICAweDAwMDAwMDYwCi0jZGVmaW5lIFNaXzE2TQkgICAgMHgwMDAwMDA3MAotI2RlZmluZSBTWl8yNTZNCSAgICAweDAwMDAwMDkwCi0KLS8qIFN0b3JhZ2UgYXR0cmlidXRlcyAqLwotI2RlZmluZSBTQV9XCSAgICAweDAwMDAwODAwCSAgICAvKiBXcml0ZS10aHJvdWdoICovCi0jZGVmaW5lIFNBX0kJICAgIDB4MDAwMDA0MDAJICAgIC8qIENhY2hpbmcgaW5oaWJpdGVkICovCi0jZGVmaW5lIFNBX00JICAgIDB4MDAwMDAyMDAJICAgIC8qIE1lbW9yeSBjb2hlcmVuY2UgKi8KLSNkZWZpbmUgU0FfRwkgICAgMHgwMDAwMDEwMAkgICAgLyogR3VhcmRlZCAqLwotI2RlZmluZSBTQV9FCSAgICAweDAwMDAwMDgwCSAgICAvKiBFbmRpYW4gKi8KLQotLyogQWNjZXNzIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUNfWAkgICAgMHgwMDAwMDAyNAkgICAgLyogRXhlY3V0ZSAqLwotI2RlZmluZSBBQ19XCSAgICAweDAwMDAwMDEyCSAgICAvKiBXcml0ZSAqLwotI2RlZmluZSBBQ19SCSAgICAweDAwMDAwMDA5CSAgICAvKiBSZWFkICovCi0KLS8qIFNvbWUgaGFuZHkgbWFjcm9zICovCi0KLSNkZWZpbmUgRVBOKGUpCQkoKGUpICYgMHhmZmZmZmMwMCkKLSNkZWZpbmUgVExCMChlcG4sc3opCSggKEVQTigoZXBuKSkgfCAoc3opIHwgVExCX1ZBTElEICkgKQotI2RlZmluZSBUTEIxKHJwbixlcnBuKQkoICgocnBuKSYweGZmZmZmYzAwKSB8IChlcnBuKSApCi0jZGVmaW5lIFRMQjIoYSkJCSggKGEpJjB4MDAwMDBmYmYgKQotCi0jZGVmaW5lIHRsYnRhYl9zdGFydFwKLQltZmxyICAgIHIxICA7XAotCWJsIDBmCSAgICA7Ci0KLSNkZWZpbmUgdGxidGFiX2VuZFwKLQkubG9uZyAwLCAwLCAwCTsgICBcCi0wOgltZmxyICAgIHIwCTsgICBcCi0JbXRsciAgICByMQk7ICAgXAotCWJscgkJOwotCi0jZGVmaW5lIHRsYmVudHJ5KGVwbixzeixycG4sZXJwbixhdHRyKVwKLQkubG9uZyBUTEIwKGVwbixzeiksVExCMShycG4sZXJwbiksVExCMihhdHRyKQotCisjaW5jbHVkZSA8YXNtLXBwYy9tbXUuaD4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUTEIgVEFCTEUKQEAgLTgwLDM0ICszNyw2OCBAQAogICogIFBvaW50ZXIgdG8gdGhlIHRhYmxlIGlzIHJldHVybmVkIGluIHIxCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgICAuc2VjdGlvbiAuYm9vdHBnLCJheCIKLSAgICAuZ2xvYmwgdGxidGFiCisJLnNlY3Rpb24gLmJvb3RwZywiYXgiCisJLmdsb2JsIHRsYnRhYgogCiB0bGJ0YWI6Ci0gICAgdGxidGFiX3N0YXJ0CisJdGxidGFiX3N0YXJ0CisKKwkvKgorCSAqIEJPT1RfQ1MgKEZMQVNIKSBtdXN0IGJlIGZpcnN0LiBCZWZvcmUgcmVsb2NhdGlvbiBTQV9JIGNhbiBiZSBvZmYgdG8gdXNlIHRoZQorCSAqIHNwZWVkIHVwIGJvb3QgcHJvY2Vzcy4gSXQgaXMgcGF0Y2hlZCBhZnRlciByZWxvY2F0aW9uIHRvIGVuYWJsZSBTQV9JCisJICovCisjaWZuZGVmIENPTkZJR19OQU5EX1NQTAorCXRsYmVudHJ5KENGR19CT09UX0JBU0VfQUREUiwgU1pfMjU2TSwgQ0ZHX0JPT1RfQkFTRV9BRERSLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HKQorI2Vsc2UKKwl0bGJlbnRyeShDRkdfTkFORF9CT09UX1NQTF9TUkMsIFNaXzRLLCBDRkdfTkFORF9CT09UX1NQTF9TUkMsIDAsIEFDX1J8QUNfV3xBQ19YfFNBX0cpCisjZW5kaWYKKworCS8qIFRMQi1lbnRyeSBmb3IgaW5pdC1yYW0gaW4gZGNhY2hlIChTQV9JIG11c3QgYmUgdHVybmVkIG9mZiEpICovCisJdGxiZW50cnkoQ0ZHX0lOSVRfUkFNX0FERFIsIFNaXzRLLCBDRkdfSU5JVF9SQU1fQUREUiwgMCwgQUNfUnxBQ19XfEFDX1h8U0FfRykKIAotICAgIC8qCi0gICAgICogQk9PVF9DUyAoRkxBU0gpIG11c3QgYmUgZmlyc3QuIEJlZm9yZSByZWxvY2F0aW9uIFNBX0kgY2FuIGJlIG9mZiB0byB1c2UgdGhlCi0gICAgICogc3BlZWQgdXAgYm9vdCBwcm9jZXNzLiBJdCBpcyBwYXRjaGVkIGFmdGVyIHJlbG9jYXRpb24gdG8gZW5hYmxlIFNBX0kKLSAgICAgKi8KLSAgICB0bGJlbnRyeSggQ0ZHX0JPT1RfQkFTRV9BRERSLCBTWl8yNTZNLCBDRkdfQk9PVF9CQVNFX0FERFIsIDAsIEFDX1J8QUNfV3xBQ19YfFNBX0cvKnxTQV9JKi8pCisJdGxiZW50cnkoQ0ZHX1NEUkFNX0JBU0UsIFNaXzI1Nk0sIENGR19TRFJBTV9CQVNFLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kpCiAKLSAgICAvKiBUTEItZW50cnkgZm9yIGluaXQtcmFtIGluIGRjYWNoZSAoU0FfSSBtdXN0IGJlIHR1cm5lZCBvZmYhKSAqLwotICAgIHRsYmVudHJ5KCBDRkdfSU5JVF9SQU1fQUREUiwgU1pfNjRLLCBDRkdfSU5JVF9SQU1fQUREUiwgMCwgQUNfUnxBQ19XfEFDX1h8U0FfRyApCisJLyogUENJIGJhc2UgJiBwZXJpcGhlcmFscyAqLworCXRsYmVudHJ5KENGR19QQ0lfQkFTRSwgU1pfMjU2TSwgQ0ZHX1BDSV9CQVNFLCAwLCBBQ19SfEFDX1d8U0FfR3xTQV9JKQogCi0gICAgdGxiZW50cnkoIENGR19TRFJBTV9CQVNFLCBTWl8yNTZNLCBDRkdfU0RSQU1fQkFTRSwgMCwgQUNfUnxBQ19XfEFDX1h8U0FfR3xTQV9JICkKLSAgICB0bGJlbnRyeSggQ0ZHX1BDSV9CQVNFLCBTWl8yNTZNLCBDRkdfUENJX0JBU0UsIDAsIEFDX1J8QUNfV3xTQV9HfFNBX0kgKQotICAgIHRsYmVudHJ5KCBDRkdfTlZSQU1fQkFTRV9BRERSLCBTWl8yNTZNLCBDRkdfTlZSQU1fQkFTRV9BRERSLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9XfFNBX0kgKQotICAgIHRsYmVudHJ5KCBDRkdfTkFORF9BRERSLCBTWl8yNTZNLCBDRkdfTkFORF9BRERSLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9XfFNBX0kgKQorCXRsYmVudHJ5KENGR19OVlJBTV9CQVNFX0FERFIsIFNaXzI1Nk0sIENGR19OVlJBTV9CQVNFX0FERFIsIDAsIEFDX1J8QUNfV3xBQ19YfFNBX1d8U0FfSSkKKwl0bGJlbnRyeShDRkdfTkFORF9BRERSLCBTWl80SywgQ0ZHX05BTkRfQUREUiwgMCwgQUNfUnxBQ19XfEFDX1h8U0FfV3xTQV9JKQogCi0gICAgLyogUENJICovCi0gICAgdGxiZW50cnkoIENGR19QQ0lfTUVNQkFTRSwgU1pfMjU2TSwgQ0ZHX1BDSV9NRU1CQVNFLCAwLCBBQ19SfEFDX1d8U0FfR3xTQV9JICkKLSAgICB0bGJlbnRyeSggQ0ZHX1BDSV9NRU1CQVNFMSwgU1pfMjU2TSwgQ0ZHX1BDSV9NRU1CQVNFMSwgMCwgQUNfUnxBQ19XfFNBX0d8U0FfSSApCi0gICAgdGxiZW50cnkoIENGR19QQ0lfTUVNQkFTRTIsIFNaXzI1Nk0sIENGR19QQ0lfTUVNQkFTRTIsIDAsIEFDX1J8QUNfV3xTQV9HfFNBX0kgKQotICAgIHRsYmVudHJ5KCBDRkdfUENJX01FTUJBU0UzLCBTWl8yNTZNLCBDRkdfUENJX01FTUJBU0UzLCAwLCBBQ19SfEFDX1d8U0FfR3xTQV9JICkKKwkvKiBQQ0kgKi8KKwl0bGJlbnRyeShDRkdfUENJX01FTUJBU0UsIFNaXzI1Nk0sIENGR19QQ0lfTUVNQkFTRSwgMCwgQUNfUnxBQ19XfFNBX0d8U0FfSSkKKwl0bGJlbnRyeShDRkdfUENJX01FTUJBU0UxLCBTWl8yNTZNLCBDRkdfUENJX01FTUJBU0UxLCAwLCBBQ19SfEFDX1d8U0FfR3xTQV9JKQorCXRsYmVudHJ5KENGR19QQ0lfTUVNQkFTRTIsIFNaXzI1Nk0sIENGR19QQ0lfTUVNQkFTRTIsIDAsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1BDSV9NRU1CQVNFMywgU1pfMjU2TSwgQ0ZHX1BDSV9NRU1CQVNFMywgMCwgQUNfUnxBQ19XfFNBX0d8U0FfSSkKIAotICAgIC8qIFVTQiAyLjAgRGV2aWNlICovCi0gICAgdGxiZW50cnkoIENGR19VU0JfREVWSUNFLCBTWl8xSywgQ0ZHX1VTQl9ERVZJQ0UsIDAsIEFDX1J8QUNfV3xTQV9HfFNBX0kgKQorCS8qIFVTQiAyLjAgRGV2aWNlICovCisJdGxiZW50cnkoQ0ZHX1VTQl9ERVZJQ0UsIFNaXzFLLCBDRkdfVVNCX0RFVklDRSwgMCwgQUNfUnxBQ19XfFNBX0d8U0FfSSkKKworCXRsYnRhYl9lbmQKKworI2lmIGRlZmluZWQoQ09ORklHX05BTkRfVV9CT09UKSAmJiAhZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisJLyoKKwkgKiBGb3IgTkFORCBib290aW5nIHRoZSBmaXJzdCBUTEIgaGFzIHRvIGJlIHJlY29uZmlndXJlZCB0byBmdWxsIHNpemUKKwkgKiBhbmQgd2l0aCBjYWNoaW5nIGRpc2FibGVkIGFmdGVyIHJ1bm5pbmcgZnJvbSBSQU0hCisJICovCisjZGVmaW5lIFRMQjAwCVRMQjAoQ0ZHX0JPT1RfQkFTRV9BRERSLCBTWl8yNTZNKQorI2RlZmluZSBUTEIwMQlUTEIxKENGR19CT09UX0JBU0VfQUREUiwgMCkKKyNkZWZpbmUgVExCMDIJVExCMihBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kpCiAKLSAgICB0bGJ0YWJfZW5kCisJLmdsb2JsCXJlY29uZmlnX3RsYjAKK3JlY29uZmlnX3RsYjA6CisJc3luYworCWlzeW5jCisJYWRkaQlyNCxyMCwweDAwMDAJCS8qIFRMQiBlbnRyeSAjMCAqLworCWxpcwlyNSxUTEIwMEBoCisJb3JpCXI1LHI1LFRMQjAwQGwKKwl0bGJ3ZQlyNSxyNCwweDAwMDAJCS8qIFNhdmUgaXQgb3V0ICovCisJbGlzCXI1LFRMQjAxQGgKKwlvcmkJcjUscjUsVExCMDFAbAorCXRsYndlCXI1LHI0LDB4MDAwMQkJLyogU2F2ZSBpdCBvdXQgKi8KKwlsaXMJcjUsVExCMDJAaAorCW9yaQlyNSxyNSxUTEIwMkBsCisJdGxid2UJcjUscjQsMHgwMDAyCQkvKiBTYXZlIGl0IG91dCAqLworCXN5bmMKKwlpc3luYworCWJscgorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2JhbWJvby91LWJvb3QtbmFuZC5sZHMgYi9ib2FyZC9hbWNjL2JhbWJvby91LWJvb3QtbmFuZC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkYWUwZQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2FtY2MvYmFtYm9vL3UtYm9vdC1uYW5kLmxkcwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9ICsgU0laRU9GX0hFQURFUlM7CisgIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQorICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KKyAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KKyAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KKyAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQorICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KSAJfQorICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9CisgIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpIAl9CisgIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKSAJfQorICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpIAl9CisgIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQorICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9CisgIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KKyAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KKyAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQorICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQorICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KKyAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQorICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KKyAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQorICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQorICAucGx0IDogeyAqKC5wbHQpIH0KKyAgLnRleHQgICAgICA6CisgIHsKKyAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCisgICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCisKKyAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQorCisgICAgLyogQWxpZ24gdG8gbmV4dCBOQU5EIGJsb2NrICovCisgICAgLiA9IEFMSUdOKDB4NDAwMCk7CisgICAgY29tbW9uL2Vudmlyb25tZW50Lm8gICgucHBjZW52KQorICAgIC8qIEtlZXAgc29tZSBzcGFjZSBoZXJlIGZvciByZWR1bmRhbnQgZW52IGFuZCBwb3RlbnRpYWwgYmFkIGVudiBibG9ja3MgKi8KKyAgICAuID0gQUxJR04oMHgxMDAwMCk7CisKKyAgICAqKC50ZXh0KQorICAgICooLmZpeHVwKQorICAgICooLmdvdDEpCisgIH0KKyAgX2V0ZXh0ID0gLjsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICA6CisgIHsKKyAgICAqKC5yb2RhdGEpCisgICAgKigucm9kYXRhMSkKKyAgICAqKC5yb2RhdGEuc3RyMS40KQorICB9CisgIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKKyAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQorICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9CisKKyAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCisgIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOworICBfZXJvdGV4dCA9IC47CisgIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKKyAgLnJlbG9jICAgOgorICB7CisgICAgKiguZ290KQorICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgKiguZ290MikKKyAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAqKC5maXh1cCkKKyAgfQorICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7CisgIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7CisKKyAgLmRhdGEgICAgOgorICB7CisgICAgKiguZGF0YSkKKyAgICAqKC5kYXRhMSkKKyAgICAqKC5zZGF0YSkKKyAgICAqKC5zZGF0YTIpCisgICAgKiguZHluYW1pYykKKyAgICBDT05TVFJVQ1RPUlMKKyAgfQorICBfZWRhdGEgID0gIC47CisgIFBST1ZJREUgKGVkYXRhID0gLik7CisKKyAgLiA9IC47CisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKKyAgLiA9IC47CisgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CisgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQorICBfX3N0b3BfX19leF90YWJsZSA9IC47CisKKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9iZWdpbiA9IC47CisgIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQorICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcyAgICAgICA6CisgIHsKKyAgICooLnNic3MpICooLnNjb21tb24pCisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgfQorCisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2JhbWJvby91LWJvb3QubGRzIGIvYm9hcmQvYW1jYy9iYW1ib28vdS1ib290LmxkcwppbmRleCAxNzY5MDBlLi5mNmQ3MTgzIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL2JhbWJvby91LWJvb3QubGRzCisrKyBiL2JvYXJkL2FtY2MvYmFtYm9vL3UtYm9vdC5sZHMKQEAgLTY4LDE5ICs2OCw3IEBACiAKICAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQogICAgIGJvYXJkL2FtY2MvYmFtYm9vL2luaXQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9rZ2RiLm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvdHJhcHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvc2VyaWFsLm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvY3B1X2luaXQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9zcGVlZC5vCSgudGV4dCkKLSAgICBjb21tb24vZGxtYWxsb2MubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvY3JjMzIubwkJKC50ZXh0KQotICAgIGxpYl9wcGMvZXh0YWJsZS5vCSgudGV4dCkKLSAgICBsaWJfZ2VuZXJpYy96bGliLm8JCSgudGV4dCkKLQotLyogICAgLiA9IGVudl9vZmZzZXQ7Ki8KLS8qICAgIGNvbW1vbi9lbnZpcm9ubWVudC5vKC50ZXh0KSovCisgICAgYm9hcmQvYW1jYy9iYW1ib28vYmFtYm9vLm8JKC50ZXh0KQogCiAgICAgKigudGV4dCkKICAgICAqKC5maXh1cCkKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mvc2VxdW9pYS9zZHJhbS5jIGIvYm9hcmQvYW1jYy9zZXF1b2lhL3NkcmFtLmMKaW5kZXggZjhiODM3ZS4uNzhlMmNiNCAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy9zZXF1b2lhL3NkcmFtLmMKKysrIGIvYm9hcmQvYW1jYy9zZXF1b2lhL3NkcmFtLmMKQEAgLTM3MSw2ICszNzEsMTQgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfRERSX0RBVEFfRVlFICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19OQU5EX1NQTCkKKy8qIFVzaW5nIGNwdS9wcGM0eHgvc3BlZWQuYyB0byBjYWxjdWxhdGUgdGhlIGJ1cyBmcmVxdWVuY3kgaXMgdG9vIGJpZworICogZm9yIHRoZSA0ayBOQU5EIGJvb3QgaW1hZ2Ugc28gZGVmaW5lIGJ1c19mcmVxdWVuY3kgdG8gMTMzTUh6IGhlcmUKKyAqIHdoaWNoIGlzIHNhdmUgZm9yIHRoZSByZWZyZXNoIGNvdW50ZXIgc2V0dXAuCisgKi8KKyNkZWZpbmUgZ2V0X2J1c19mcmVxKHZhbCkJMTMzMDAwMDAwCisjZW5kaWYKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBpbml0ZHJhbSAtLSA0NDBFUHgncyBERFIgY29udHJvbGxlciBpcyBhIERFTkFMSSBDb3JlCkBAIC0zNzksNyArMzg3LDExIEBACiBsb25nIGludCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCiB7CiAjaWYgIWRlZmluZWQoQ09ORklHX05BTkRfVV9CT09UKSB8fCBkZWZpbmVkKENPTkZJR19OQU5EX1NQTCkKKyNpZiAhZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCiAJdWxvbmcgc3BlZWQgPSBnZXRfYnVzX2ZyZXEoMCk7CisjZWxzZQorCXVsb25nIHNwZWVkID0gMTMzMzMzMzMzOwkvKiAxMzNNSHogaXMgb24gdGhlIHNhZmUgc2lkZQkqLworI2VuZGlmCiAKIAltdHNkcmFtKEREUjBfMDIsIDB4MDAwMDAwMDApOwogCkBAIC00MDQsNyArNDE2LDcgQEAKIAltdHNkcmFtKEREUjBfMjIsIDB4MDAyNjdGMEIpOwogCW10c2RyYW0oRERSMF8yMywgMHgwMDAwMDAwMCk7CiAJbXRzZHJhbShERFIwXzI0LCAweDAxMDEwMDAyKTsKLQlpZiAoc3BlZWQgPiAxMzMzMzMzMzMpCisJaWYgKHNwZWVkID4gMTMzMzMzMzM0KQogCQltdHNkcmFtKEREUjBfMjYsIDB4NUIyNjA1MEMpOwogCWVsc2UKIAkJbXRzZHJhbShERFIwXzI2LCAweDVCMjYwNDA4KTsKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mvc2VxdW9pYS9zZXF1b2lhLmMgYi9ib2FyZC9hbWNjL3NlcXVvaWEvc2VxdW9pYS5jCmluZGV4IDkzMGZhNzEuLmJhMzY1YWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2Mvc2VxdW9pYS9zZXF1b2lhLmMKKysrIGIvYm9hcmQvYW1jYy9zZXF1b2lhL3NlcXVvaWEuYwpAQCAtMzYzLDggKzM2Myw4IEBACiAJcHJpbnRmKCJCb2FyZDogUmFpbmllciAtIEFNQ0MgUFBDNDQwR1J4IEV2YWx1YXRpb24gQm9hcmQiKTsKICNlbmRpZgogCi0JcmV2ID0gKih1OCAqKShDRkdfQkNTUl9CQVNFICsgMCk7Ci0JdmFsID0gKih1OCAqKShDRkdfQkNTUl9CQVNFICsgNSkgJiAweDAxOworCXJldiA9IGluOChDRkdfQkNTUl9CQVNFICsgMCk7CisJdmFsID0gaW44KENGR19CQ1NSX0JBU0UgKyA1KSAmIDB4MDE7CiAJcHJpbnRmKCIsIFJldi4gJVgsIFBDST0lZCBNSHoiLCByZXYsIHZhbCA/IDY2IDogMzMpOwogCiAJaWYgKHMgIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvYm9hcmQvY2RzL21wYzg1NDFjZHMvbXBjODU0MWNkcy5jIGIvYm9hcmQvY2RzL21wYzg1NDFjZHMvbXBjODU0MWNkcy5jCmluZGV4IGE0MjkwNGMuLjQxOTIzMjQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Nkcy9tcGM4NTQxY2RzL21wYzg1NDFjZHMuYworKysgYi9ib2FyZC9jZHMvbXBjODU0MWNkcy9tcGM4NTQxY2RzLmMKQEAgLTQ3NywxMSArNDc3LDE0IEBACiBzdGF0aWMgc3RydWN0IHBjaV9jb25maWdfdGFibGUgcGNpX21wYzg1eHhjZHNfY29uZmlnX3RhYmxlW10gPSB7CiAJezB4MTBlMywgMHgwNTEzLCBQQ0lfQU5ZX0lELCAxLCAzLCBQQ0lfQU5ZX0lELCBkdW1teV9mdW5jLCB7MCwwLDB9fSwKIAl7MHgxMTA2LCAweDA2ODYsIFBDSV9BTllfSUQsIDEsIDIsIDAsIG1wYzg1eHhfY29uZmlnX3ZpYSwgezAsMCwwfX0sCi0JezB4MTEwNiwgMHgwNTcxLCBQQ0lfQU5ZX0lELCAxLCAyLCAxLCBtcGM4NXh4X2NvbmZpZ192aWFfdXNiaWRlLCB7MCwwLDB9fSwKKwl7MHgxMTA2LCAweDA1NzEsIFBDSV9BTllfSUQsIDEsIDIsIDEsCisJCW1wYzg1eHhfY29uZmlnX3ZpYV91c2JpZGUsIHswLDAsMH19LAogCXsweDExMDUsIDB4MzAzOCwgUENJX0FOWV9JRCwgMSwgMiwgMiwgbXBjODV4eF9jb25maWdfdmlhX3VzYiwgezAsMCwwfX0sCiAJezB4MTEwNiwgMHgzMDM4LCBQQ0lfQU5ZX0lELCAxLCAyLCAzLCBtcGM4NXh4X2NvbmZpZ192aWFfdXNiMiwgezAsMCwwfX0sCi0JezB4MTEwNiwgMHgzMDU4LCBQQ0lfQU5ZX0lELCAxLCAyLCA1LCBtcGM4NXh4X2NvbmZpZ192aWFfcG93ZXIsIHswLDAsMH19LAotCXsweDExMDYsIDB4MzA2OCwgUENJX0FOWV9JRCwgMSwgMiwgNiwgbXBjODV4eF9jb25maWdfdmlhX2FjOTcsIHswLDAsMH19CisJezB4MTEwNiwgMHgzMDU4LCBQQ0lfQU5ZX0lELCAxLCAyLCA1LAorCQltcGM4NXh4X2NvbmZpZ192aWFfcG93ZXIsIHswLDAsMH19LAorCXsweDExMDYsIDB4MzA2OCwgUENJX0FOWV9JRCwgMSwgMiwgNiwgbXBjODV4eF9jb25maWdfdmlhX2FjOTcsIHswLDAsMH19LAorCXt9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBob3NlW10gPSB7CmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU0MWNkcy91LWJvb3QubGRzIGIvYm9hcmQvY2RzL21wYzg1NDFjZHMvdS1ib290LmxkcwppbmRleCAxYmVhMDA3Li5kYzg3YTEyIDEwMDY0NAotLS0gYS9ib2FyZC9jZHMvbXBjODU0MWNkcy91LWJvb3QubGRzCisrKyBiL2JvYXJkL2Nkcy9tcGM4NTQxY2RzL3UtYm9vdC5sZHMKQEAgLTY5LDYgKzY5LDcgQEAKICAgICBjcHUvbXBjODV4eC9pbnRlcnJ1cHRzLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2NwdV9pbml0Lm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2NwdS5vICgudGV4dCkKKyAgICBkcml2ZXJzL3RzZWMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvc3BlZWQubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvcGNpLm8gKC50ZXh0KQogICAgIGNvbW1vbi9kbG1hbGxvYy5vICgudGV4dCkKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL2luaXQuUyBiL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL2luaXQuUwppbmRleCA5NzhiZGE1Li5kNDY4ZjViIDEwMDY0NAotLS0gYS9ib2FyZC9jZHMvbXBjODU0OGNkcy9pbml0LlMKKysrIGIvYm9hcmQvY2RzL21wYzg1NDhjZHMvaW5pdC5TCkBAIC02NCw4ICs2NCw5IEBACiAJLyoKIAkgKiBOdW1iZXIgb2YgVExCMCBhbmQgVExCMSBlbnRyaWVzIGluIHRoZSBmb2xsb3dpbmcgdGFibGUKIAkgKi8KLQkubG9uZyAxMworCS5sb25nICgyZi0xZikvMTYKIAorMToKICNpZiAoQ0ZHX0NDU1JCQVJfREVGQVVMVCAhPSBDRkdfQ0NTUkJBUikKIAkvKgogCSAqIFRMQjAJCTRLCU5vbi1jYWNoZWFibGUsIGd1YXJkZWQKQEAgLTEzNCw3ICsxMzUsNyBAQAogCiAJLyoKIAkgKiBUTEIgMToJMjU2TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCi0JICogMHg4MDAwMDAwMAkyNTZNCVBDSTEgTUVNIEZpcnN0IGhhbGYKKwkgKiAweDgwMDAwMDAwCTI1Nk0JUENJMSBNRU0KIAkgKi8KIAkubG9uZyBUTEIxX01BUzAoMSwgMSwgMCkKIAkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzI1Nk0pCkBAIC0xNDMsNDAgKzE0NCwzNyBAQAogCiAJLyoKIAkgKiBUTEIgMjoJMjU2TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCi0JICogMHg5MDAwMDAwMAkyNTZNCVBDSTEgTUVNIFNlY29uZCBoYWxmCisJICogMHg5MDAwMDAwMAkyNTZNCVBDSTIgTUVNCiAJICovCiAJLmxvbmcgVExCMV9NQVMwKDEsIDIsIDApCiAJLmxvbmcgVExCMV9NQVMxKDEsIDEsIDAsIDAsIEJPT0tFX1BBR0VTWl8yNTZNKQotCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX1BDSTFfTUVNX0JBU0UgKyAweDEwMDAwMDAwKSwKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19QQ0kyX01FTV9CQVNFKSwKIAkJCTAsMCwwLDAsMSwwLDEsMCkKLQkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19QQ0kxX01FTV9CQVNFICsgMHgxMDAwMDAwMCksCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfUENJMl9NRU1fQkFTRSksCiAJCQkwLDAsMCwwLDAsMSwwLDEsMCwxKQogCiAJLyoKLQkgKiBUTEIgMzoJMjU2TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCi0JICogMHhhMDAwMDAwMAkyNTZNCVBDSTIgTUVNIEZpcnN0IGhhbGYKKwkgKiBUTEIgMzoJMUdCCU5vbi1jYWNoZWFibGUsIGd1YXJkZWQKKwkgKiAweGEwMDAwMDAwCTI1Nk0JUEVYIE1FTSBGaXJzdCBoYWxmCisJICogMHhiMDAwMDAwMAkyNTZNCVBFWCBNRU0gU2Vjb25kIGhhbGYKKwkgKiAweGMwMDAwMDAwCTI1Nk0JUmFwaWQgSU8gTUVNIEZpcnN0IGhhbGYKKwkgKiAweGQwMDAwMDAwCTI1Nk0JUmFwaWQgSU8gTUVNIFNlY29uZCBoYWxmCiAJICovCiAJLmxvbmcgVExCMV9NQVMwKDEsIDMsIDApCi0JLmxvbmcgVExCMV9NQVMxKDEsIDEsIDAsIDAsIEJPT0tFX1BBR0VTWl8yNTZNKQotCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX1BDSTJfTUVNX0JBU0UpLCAwLDAsMCwwLDEsMCwxLDApCi0JLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfUENJMl9NRU1fQkFTRSksIDAsMCwwLDAsMCwxLDAsMSwwLDEpCisJLmxvbmcgVExCMV9NQVMxKDEsIDEsIDAsIDAsIEJPT0tFX1BBR0VTWl8xRykKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19QRVhfTUVNX0JBU0UpLCAwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfUEVYX01FTV9CQVNFKSwgMCwwLDAsMCwwLDEsMCwxLDAsMSkKIAogCS8qCi0JICogVExCIDQ6CTI1Nk0JTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAotCSAqIDB4YjAwMDAwMDAJMjU2TQlQQ0kyIE1FTSBTZWNvbmQgaGFsZgorCSAqIFRMQiA0OglSZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlCiAJICovCi0JLmxvbmcgVExCMV9NQVMwKDEsIDQsIDApCi0JLmxvbmcgVExCMV9NQVMxKDEsIDEsIDAsIDAsIEJPT0tFX1BBR0VTWl8yNTZNKQotCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX1BDSTJfTUVNX0JBU0UgKyAweDEwMDAwMDAwKSwKLQkJCTAsMCwwLDAsMSwwLDEsMCkKLQkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19QQ0kyX01FTV9CQVNFICsgMHgxMDAwMDAwMCksCi0JCQkwLDAsMCwwLDAsMSwwLDEsMCwxKQogCiAJLyoKIAkgKiBUTEIgNToJNjRNCU5vbi1jYWNoZWFibGUsIGd1YXJkZWQKIAkgKiAweGUwMDBfMDAwMAkxTQlDQ1NSQkFSCi0JICogMHhlMjAwXzAwMDAJMTZNCVBDSTEgSU8KLQkgKiAweGUzMDBfMDAwMAkxNk0JUENJMiBJTworCSAqIDB4ZTIwMF8wMDAwCThNCVBDSTEgSU8KKwkgKiAweGUyODBfMDAwMAk4TQlQQ0kyIElPCisJICogMHhlMzAwXzAwMDAJMTZNCVBFWCBJTwogCSAqLwogCS5sb25nIFRMQjFfTUFTMCgxLCA1LCAwKQogCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfNjRNKQpAQCAtMjAwLDE5ICsxOTgsMjIgQEAKIAkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzFNKQogCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0FETVVTX0JBU0VfQUREUiksIDAsMCwwLDAsMSwwLDEsMCkKIAkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENBRE1VU19CQVNFX0FERFIpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQotCisyOgogCWVudHJ5X2VuZAogCiAvKgogICogTEFXKExvY2FsIEFjY2VzcyBXaW5kb3cpIGNvbmZpZ3VyYXRpb246CiAgKgogICogMHgwMDAwXzAwMDAgICAgIDB4N2ZmZl9mZmZmICAgICBERFIgICAgICAgICAgICAgICAgICAgICAyRwotICogMHg4MDAwXzAwMDAgICAgIDB4OWZmZl9mZmZmICAgICBQQ0kxIE1FTSAgICAgICAgICAgICAgICA1MTJNCi0gKiAweGEwMDBfMDAwMCAgICAgMHhiZmZmX2ZmZmYgICAgIFBDSTIgTUVNICAgICAgICAgICAgICAgIDUxMk0KKyAqIDB4ODAwMF8wMDAwICAgICAweDhmZmZfZmZmZiAgICAgUENJMSBNRU0gICAgICAgICAgICAgICAgMjU2TQorICogMHg5MDAwXzAwMDAgICAgIDB4OWZmZl9mZmZmICAgICBQQ0kyIE1FTSAgICAgICAgICAgICAgICAyNTZNCisgKiAweGEwMDBfMDAwMCAgICAgMHhiZmZmX2ZmZmYgICAgIFBFWCBNRU0gICAgICAgICAgICAgICAgIDUxMk0KKyAqIDB4YzAwMF8wMDAwICAgICAweGRmZmZfZmZmZiAgICAgUmFwaWRJTyAgICAgICAgICAgICAgICAgNTEyTQogICogMHhlMDAwXzAwMDAgICAgIDB4ZTAwMF9mZmZmICAgICBDQ1NSICAgICAgICAgICAgICAgICAgICAxTQotICogMHhlMjAwXzAwMDAgICAgIDB4ZTIwZl9mZmZmICAgICBQQ0kxIElPICAgICAgICAgICAgICAgICAxTQotICogMHhlMjEwXzAwMDAgICAgIDB4ZTIxZl9mZmZmICAgICBQQ0kyIElPICAgICAgICAgICAgICAgICAxTQotICogMHhmMDAwXzAwMDAgICAgIDB4ZjdmZl9mZmZmICAgICBTRFJBTSAgICAgICAgICAgICAgICAgICAxMjhNCisgKiAweGUyMDBfMDAwMCAgICAgMHhlMjdmX2ZmZmYgICAgIFBDSTEgSU8gICAgICAgICAgICAgICAgIDhNCisgKiAweGUyODBfMDAwMCAgICAgMHhlMmZmX2ZmZmYgICAgIFBDSTIgSU8gICAgICAgICAgICAgICAgIDhNCisgKiAweGUzMDBfMDAwMCAgICAgMHhlM2ZmX2ZmZmYgICAgIFBFWCBJTyAgICAgICAgICAgICAgICAgIDE2TQorICogMHhmMDAwXzAwMDAgICAgIDB4ZjNmZl9mZmZmICAgICBTRFJBTSAgICAgICAgICAgICAgICAgICA2NE0KICAqIDB4ZjgwMF8wMDAwICAgICAweGY4MGZfZmZmZiAgICAgTlZSQU0vQ0FETVVTICgqKSAgICAgICAgMU0KICAqIDB4ZmYwMF8wMDAwICAgICAweGZmN2ZfZmZmZiAgICAgRkxBU0ggKDJuZCBiYW5rKSAgICAgICAgOE0KICAqIDB4ZmY4MF8wMDAwICAgICAweGZmZmZfZmZmZiAgICAgRkxBU0ggKGJvb3QgYmFuaykgICAgICAgOE0KQEAgLTIyOSwyNyArMjMwLDM5IEBACiAjZGVmaW5lIExBV0FSMCAgKChMQVdBUl9UUkdUX0lGX0REUiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xMjhNKSkgJiB+TEFXQVJfRU4pCiAKICNkZWZpbmUgTEFXQkFSMSAoKENGR19QQ0kxX01FTV9CQVNFPj4xMikgJiAweGZmZmZmKQotI2RlZmluZSBMQVdBUjEgCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJMSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKSkKKyNkZWZpbmUgTEFXQVIxIAkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMjU2TSkpCiAKICNkZWZpbmUgTEFXQkFSMiAoKENGR19QQ0kyX01FTV9CQVNFPj4xMikgJiAweGZmZmZmKQotI2RlZmluZSBMQVdBUjIgCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKSkKKyNkZWZpbmUgTEFXQVIyIAkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTIgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMjU2TSkpCiAKICNkZWZpbmUgTEFXQkFSMyAoKENGR19QQ0kxX0lPX1BIWVM+PjEyKSAmIDB4ZmZmZmYpCi0jZGVmaW5lIExBV0FSMyAJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0kxIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzFNKSkKKyNkZWZpbmUgTEFXQVIzIAkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfOE0pKQogCiAjZGVmaW5lIExBV0JBUjQgKChDRkdfUENJMl9JT19QSFlTPj4xMikgJiAweGZmZmZmKQotI2RlZmluZSBMQVdBUjQgCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xTSkpCisjZGVmaW5lIExBV0FSNCAJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0kyIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzhNKSkKIAogLyogTEJDIHdpbmRvdyAtIG1hcHMgMjU2TSAweGYwMDAwMDAwIC0+IDB4ZmZmZmZmZmYgKi8KICNkZWZpbmUgTEFXQkFSNSAoKENGR19MQkNfU0RSQU1fQkFTRT4+MTIpICYgMHhmZmZmZikKICNkZWZpbmUgTEFXQVI1IAkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX0xCQyB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8yNTZNKSkKIAorI2RlZmluZSBMQVdCQVI2ICgoQ0ZHX1BFWF9NRU1fQkFTRT4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVI2IAkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BFWCB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKSkKKworI2RlZmluZSBMQVdCQVI3ICgoQ0ZHX1BFWF9JT19QSFlTPj4xMikgJiAweGZmZmZmKQorI2RlZmluZSBMQVdBUjcgCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUEVYIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzE2TSkpCisKKyNkZWZpbmUgTEFXQkFSOCAoKENGR19SSU9fTUVNX0JBU0U+PjEyKSAmIDB4ZmZmZmYpCisjZGVmaW5lIExBV0FSOCAgKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9SSU8gfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNTEyTSkpCisKIAkuc2VjdGlvbiAuYm9vdHBnLCAiYXgiCiAJLmdsb2JsCWxhd19lbnRyeQogCiBsYXdfZW50cnk6CiAJZW50cnlfc3RhcnQKLQkubG9uZyA2CisJLmxvbmcgKDRmLTNmKS84CiszOgogCS5sb25nIExBV0JBUjAsTEFXQVIwLExBV0JBUjEsTEFXQVIxLExBV0JBUjIsTEFXQVIyLExBV0JBUjMsTEFXQVIzCi0JLmxvbmcgTEFXQkFSNCxMQVdBUjQsTEFXQkFSNSxMQVdBUjUKKwkubG9uZyBMQVdCQVI0LExBV0FSNCxMQVdCQVI1LExBV0FSNSxMQVdCQVI2LExBV0FSNixMQVdCQVI3LExBV0FSNworCS5sb25nIExBV0JBUjgsTEFXQVI4Cis0OgogCWVudHJ5X2VuZApkaWZmIC0tZ2l0IGEvYm9hcmQvY2RzL21wYzg1NDhjZHMvbXBjODU0OGNkcy5jIGIvYm9hcmQvY2RzL21wYzg1NDhjZHMvbXBjODU0OGNkcy5jCmluZGV4IDc0MzNlYmYuLjkyOWZmMmUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL21wYzg1NDhjZHMuYworKysgYi9ib2FyZC9jZHMvbXBjODU0OGNkcy9tcGM4NTQ4Y2RzLmMKQEAgLTUxLDYgKzUxLDcgQEAKIHsKIAl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19DQ1NSQkFSOwogCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOworCXZvbGF0aWxlIGNjc3JfbG9jYWxfZWNtX3QgKmVjbSA9ICZpbW1hcC0+aW1fbG9jYWxfZWNtOwogCiAJLyogUENJIHNsb3QgaW4gVVNFUiBiaXRzIENTUls2OjddIGJ5IGNvbnZlbnRpb24uICovCiAJdWludCBwY2lfc2xvdCA9IGdldF9wY2lfc2xvdCAoKTsKQEAgLTg5LDYgKzkwLDEyIEBACiAJICovCiAJbG9jYWxfYnVzX2luaXQgKCk7CiAKKwkvKgorCSAqIEZpeCBDUFUyIGVycmF0YTogQSBjb3JlIGhhbmcgcG9zc2libGUgd2hpbGUgZXhlY3V0aW5nIGEKKwkgKiBtc3luYyBpbnN0cnVjdGlvbiBhbmQgYSBzbm9vcGFibGUgdHJhbnNhY3Rpb24gZnJvbSBhbiBJL08KKwkgKiBtYXN0ZXIgdGFnZ2VkIHRvIG1ha2UgcXVpY2sgZm9yd2FyZCBwcm9ncmVzcyBpcyBwcmVzZW50LgorCSAqLworCWVjbS0+ZWVicGNyIHw9ICgxIDw8IDE2KTsKIAogCS8qCiAJICogSGFjayBUU0VDIDMgYW5kIDQgSU8gdm9sdGFnZXMuCkBAIC0zMDMsMTEgKzMxMCwxNCBAQAogc3RhdGljIHN0cnVjdCBwY2lfY29uZmlnX3RhYmxlIHBjaV9tcGM4NXh4Y2RzX2NvbmZpZ190YWJsZVtdID0gewogCXsweDEwZTMsIDB4MDUxMywgUENJX0FOWV9JRCwgMSwgMywgUENJX0FOWV9JRCwgZHVtbXlfZnVuYywgezAsMCwwfX0sCiAJezB4MTEwNiwgMHgwNjg2LCBQQ0lfQU5ZX0lELCAxLCAyLCAwLCBtcGM4NXh4X2NvbmZpZ192aWEsIHswLDAsMH19LAotCXsweDExMDYsIDB4MDU3MSwgUENJX0FOWV9JRCwgMSwgMiwgMSwgbXBjODV4eF9jb25maWdfdmlhX3VzYmlkZSwgezAsMCwwfX0sCisJezB4MTEwNiwgMHgwNTcxLCBQQ0lfQU5ZX0lELCAxLCAyLCAxLAorCQltcGM4NXh4X2NvbmZpZ192aWFfdXNiaWRlLCB7MCwwLDB9fSwKIAl7MHgxMTA1LCAweDMwMzgsIFBDSV9BTllfSUQsIDEsIDIsIDIsIG1wYzg1eHhfY29uZmlnX3ZpYV91c2IsIHswLDAsMH19LAogCXsweDExMDYsIDB4MzAzOCwgUENJX0FOWV9JRCwgMSwgMiwgMywgbXBjODV4eF9jb25maWdfdmlhX3VzYjIsIHswLDAsMH19LAotCXsweDExMDYsIDB4MzA1OCwgUENJX0FOWV9JRCwgMSwgMiwgNSwgbXBjODV4eF9jb25maWdfdmlhX3Bvd2VyLCB7MCwwLDB9fSwKLQl7MHgxMTA2LCAweDMwNjgsIFBDSV9BTllfSUQsIDEsIDIsIDYsIG1wYzg1eHhfY29uZmlnX3ZpYV9hYzk3LCB7MCwwLDB9fQorCXsweDExMDYsIDB4MzA1OCwgUENJX0FOWV9JRCwgMSwgMiwgNSwKKwkJbXBjODV4eF9jb25maWdfdmlhX3Bvd2VyLCB7MCwwLDB9fSwKKwl7MHgxMTA2LCAweDMwNjgsIFBDSV9BTllfSUQsIDEsIDIsIDYsIG1wYzg1eHhfY29uZmlnX3ZpYV9hYzk3LCB7MCwwLDB9fSwKKwl7fSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgaG9zZVtdID0gewpkaWZmIC0tZ2l0IGEvYm9hcmQvY2RzL21wYzg1NDhjZHMvdS1ib290LmxkcyBiL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL3UtYm9vdC5sZHMKaW5kZXggMmM4ZmU5Ni4uYzFmMzQ5NSAxMDA2NDQKLS0tIGEvYm9hcmQvY2RzL21wYzg1NDhjZHMvdS1ib290LmxkcworKysgYi9ib2FyZC9jZHMvbXBjODU0OGNkcy91LWJvb3QubGRzCkBAIC02OSw2ICs2OSw3IEBACiAgICAgY3B1L21wYzg1eHgvaW50ZXJydXB0cy5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9jcHVfaW5pdC5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9jcHUubyAoLnRleHQpCisgICAgZHJpdmVycy90c2VjLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L3NwZWVkLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L3BjaS5vICgudGV4dCkKICAgICBjb21tb24vZGxtYWxsb2MubyAoLnRleHQpCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU1NWNkcy9tcGM4NTU1Y2RzLmMgYi9ib2FyZC9jZHMvbXBjODU1NWNkcy9tcGM4NTU1Y2RzLmMKaW5kZXggZDk4MGVhNi4uNzA0YmYwMyAxMDA2NDQKLS0tIGEvYm9hcmQvY2RzL21wYzg1NTVjZHMvbXBjODU1NWNkcy5jCisrKyBiL2JvYXJkL2Nkcy9tcGM4NTU1Y2RzL21wYzg1NTVjZHMuYwpAQCAtNDc0LDExICs0NzQsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NvbmZpZ190YWJsZSBwY2lfbXBjODV4eGNkc19jb25maWdfdGFibGVbXSA9IHsKIAl7MHgxMGUzLCAweDA1MTMsIFBDSV9BTllfSUQsIDEsIDMsIFBDSV9BTllfSUQsIGR1bW15X2Z1bmMsIHswLDAsMH19LAogCXsweDExMDYsIDB4MDY4NiwgUENJX0FOWV9JRCwgMSwgMiwgMCwgbXBjODV4eF9jb25maWdfdmlhLCB7MCwwLDB9fSwKLQl7MHgxMTA2LCAweDA1NzEsIFBDSV9BTllfSUQsIDEsIDIsIDEsIG1wYzg1eHhfY29uZmlnX3ZpYV91c2JpZGUsIHswLDAsMH19LAorCXsweDExMDYsIDB4MDU3MSwgUENJX0FOWV9JRCwgMSwgMiwgMSwKKwkJbXBjODV4eF9jb25maWdfdmlhX3VzYmlkZSwgezAsMCwwfX0sCiAJezB4MTEwNSwgMHgzMDM4LCBQQ0lfQU5ZX0lELCAxLCAyLCAyLCBtcGM4NXh4X2NvbmZpZ192aWFfdXNiLCB7MCwwLDB9fSwKIAl7MHgxMTA2LCAweDMwMzgsIFBDSV9BTllfSUQsIDEsIDIsIDMsIG1wYzg1eHhfY29uZmlnX3ZpYV91c2IyLCB7MCwwLDB9fSwKLQl7MHgxMTA2LCAweDMwNTgsIFBDSV9BTllfSUQsIDEsIDIsIDUsIG1wYzg1eHhfY29uZmlnX3ZpYV9wb3dlciwgezAsMCwwfX0sCi0JezB4MTEwNiwgMHgzMDY4LCBQQ0lfQU5ZX0lELCAxLCAyLCA2LCBtcGM4NXh4X2NvbmZpZ192aWFfYWM5NywgezAsMCwwfX0KKwl7MHgxMTA2LCAweDMwNTgsIFBDSV9BTllfSUQsIDEsIDIsIDUsCisJCW1wYzg1eHhfY29uZmlnX3ZpYV9wb3dlciwgezAsMCwwfX0sCisJezB4MTEwNiwgMHgzMDY4LCBQQ0lfQU5ZX0lELCAxLCAyLCA2LCBtcGM4NXh4X2NvbmZpZ192aWFfYWM5NywgezAsMCwwfX0sCisJe30sCiB9OwogCiAKQEAgLTQ4Nyw3ICs0OTAsNyBAQAogCWNvbmZpZ190YWJsZTogcGNpX21wYzg1eHhjZHNfY29uZmlnX3RhYmxlLAogCX0sCiAjaWZkZWYgQ09ORklHX01QQzg1WFhfUENJMgotCXsgfQorCXt9LAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU1NWNkcy91LWJvb3QubGRzIGIvYm9hcmQvY2RzL21wYzg1NTVjZHMvdS1ib290LmxkcwppbmRleCAyYWEyYWQ3Li45Mjg1OTI4IDEwMDY0NAotLS0gYS9ib2FyZC9jZHMvbXBjODU1NWNkcy91LWJvb3QubGRzCisrKyBiL2JvYXJkL2Nkcy9tcGM4NTU1Y2RzL3UtYm9vdC5sZHMKQEAgLTY5LDYgKzY5LDcgQEAKICAgICBjcHUvbXBjODV4eC9pbnRlcnJ1cHRzLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2NwdV9pbml0Lm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2NwdS5vICgudGV4dCkKKyAgICBkcml2ZXJzL3RzZWMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvc3BlZWQubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvcGNpLm8gKC50ZXh0KQogICAgIGNvbW1vbi9kbG1hbGxvYy5vICgudGV4dCkKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvTWFrZWZpbGUgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzIxNjgKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL01ha2VmaWxlCkBAIC0wLDAgKzEsNTggQEAKKyMKKyMgQ29weXJpZ2h0IDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKKyMgaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyMgJChzaGVsbCBta2RpciAtcCAkKG9iaikuL2NvbW1vbikKKyMgZW5kaWYKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSAkKEJPQVJEKS5vIFwKKwkgICAuLi9jb21tb24vcGl4aXMubworCitTT0JKUwk6PSBpbml0Lm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKKworY2xlYW46CisJcm0gLWYgJChPQkpTKSAkKFNPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy9jb25maWcubWsgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTY2M2VmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy9jb25maWcubWsKQEAgLTAsMCArMSwzMiBAQAorIworIyBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIG1wYzg1NDRkcyBib2FyZAorIworaWZuZGVmIFRFWFRfQkFTRQorVEVYVF9CQVNFID0gMHhmZmY4MDAwMAorZW5kaWYKKworUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfRTUwMD0xCitQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19NUEM4NXh4PTEKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX01QQzg1NDQ9MQpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy9pbml0LlMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZmZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy9pbml0LlMKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxwcGNfYXNtLnRtcGw+CisjaW5jbHVkZSA8cHBjX2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8bXBjODV4eC5oPgorCisjZGVmaW5lIExBV0FSX1RSR1RfUENJMQkJMHgwMDAwMDAwMAorI2RlZmluZSBMQVdBUl9UUkdUX1BDSUUxCTB4MDAyMDAwMDAKKyNkZWZpbmUgTEFXQVJfVFJHVF9QQ0lFMgkweDAwMTAwMDAwCisjZGVmaW5lIExBV0FSX1RSR1RfUENJRTMJMHgwMDMwMDAwMAorI2RlZmluZSBMQVdBUl9UUkdUX0xCQwkJMHgwMDQwMDAwMAorI2RlZmluZSBMQVdBUl9UUkdUX0REUgkJMHgwMGYwMDAwMAorCisvKgorICogVExCMCBhbmQgVExCMSBFbnRyaWVzCisgKgorICogT3V0IG9mIHJlc2V0LCBUTEIxJ3MgRW50cnkgMCBtYXBzIHRoZSBoaWdoZXN0IDRLIGZvciBDQ1NSQkFSLgorICogSG93ZXZlciwgQ0NTUkJBUiBpcyB0aGVuIHJlbG9jYXRlZCB0byBDRkdfQ0NTUkJBUiByaWdodCBhZnRlcgorICogdGhlc2UgVExCIGVudHJpZXMgYXJlIGVzdGFibGlzaGVkLgorICoKKyAqIFRoZSBUTEIgZW50cmllcyBmb3IgRERSIGFyZSBkeW5hbWljYWxseSBzZXR1cCBpbiBzcGRfc2RyYW0oKQorICogYW5kIHVzZSBUTEIxIEVudHJpZXMgOCB0aHJvdWdoIDE1IGFzIG5lZWRlZCBhY2NvcmRpbmcgdG8gdGhlCisgKiBzaXplIG9mIEREUiBtZW1vcnkuCisgKgorICogTUFTMDogdGxic2VsLCBlc2VsLCBudgorICogTUFTMTogdmFsaWQsIGlwcm90LCB0aWQsIHRzLCB0c2l6ZQorICogTUFTMjogZXBuLCBzaGFyZW4sIHgwLCB4MSwgdywgaSwgbSwgZywgZQorICogTUFTMzogcnBuLCB1MC11MywgdXgsIHN4LCB1dywgc3csIHVyLCBzcgorICovCisKKyNkZWZpbmUJZW50cnlfc3RhcnQgXAorCW1mbHIJcjEgCTsJXAorCWJsCTBmIAk7CisKKyNkZWZpbmUJZW50cnlfZW5kIFwKKzA6CW1mbHIJcjAJOwlcCisJbXRscglyMQk7CVwKKwlibHIJCTsKKworCisJLnNlY3Rpb24JLmJvb3RwZywgImF4IgorCS5nbG9ibAl0bGIxX2VudHJ5Cit0bGIxX2VudHJ5OgorCWVudHJ5X3N0YXJ0CisKKwkvKgorCSAqIE51bWJlciBvZiBUTEIwIGFuZCBUTEIxIGVudHJpZXMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZQorCSAqLworCS5sb25nICgyZi0xZikvMTYKKzE6CisJLyoKKwkgKiBUTEIwCQk0SwlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHhmZjcwMDAwMAk0SwlJbml0aWFsIENDU1JCQVIgbWFwcGluZworCSAqCisJICogVGhpcyBlbmRzIHVwIGF0IGEgVExCMCBJbmRleD09MCBlbnRyeSwgYW5kIG11c3Qgbm90IGNvbGxpZGUKKwkgKiB3aXRoIG90aGVyIFRMQjAgRW50cmllcy4KKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMCwgMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19DQ1NSQkFSX0RFRkFVTFQpLCAwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfQ0NTUkJBUl9ERUZBVUxUKSwgMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS8qCisJICogVExCMAkJMTZLCUNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqIFRlbXBvcmFyeSBHbG9iYWwgZGF0YSBmb3IgaW5pdGlhbGl6YXRpb24KKwkgKgorCSAqIFVzZSBmb3VyIDRLIFRMQjAgZW50cmllcy4gIFRoZXNlIGVudHJpZXMgbXVzdCBiZSBjYWNoZWFibGUKKwkgKiBhcyB0aGV5IHByb3ZpZGUgdGhlIGJvb3RzdHJhcCBtZW1vcnkgYmVmb3JlIHRoZSBtZW1vcnkKKwkgKiBjb250cm9sZXIgYW5kIHJlYWwgbWVtb3J5IGhhdmUgYmVlbiBjb25maWd1cmVkLgorCSAqCisJICogVGhlc2UgZW50cmllcyBlbmQgdXAgYXQgVExCMCBJbmRpY2llcyAweDEwLCAweDE0LCAweDE4IGFuZCAweDFjLAorCSAqIGFuZCBtdXN0IG5vdCBjb2xsaWRlIHdpdGggb3RoZXIgVExCMCBlbnRyaWVzLgorCSAqLworCS5sb25nIFRMQjFfTUFTMCgwLCAwLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAwLCAwLCAwLCAwKQorCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX0lOSVRfUkFNX0FERFIpLAorCQkJMCwwLDAsMCwwLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0lOSVRfUkFNX0FERFIpLAorCQkJMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS5sb25nIFRMQjFfTUFTMCgwLCAwLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAwLCAwLCAwLCAwKQorCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX0lOSVRfUkFNX0FERFIgKyA0ICogMTAyNCksCisJCQkwLDAsMCwwLDAsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfSU5JVF9SQU1fQUREUiArIDQgKiAxMDI0KSwKKwkJCTAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKwkubG9uZyBUTEIxX01BUzAoMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMCwgMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19JTklUX1JBTV9BRERSICsgOCAqIDEwMjQpLAorCQkJMCwwLDAsMCwwLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0lOSVRfUkFNX0FERFIgKyA4ICogMTAyNCksCisJCQkwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLmxvbmcgVExCMV9NQVMwKDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDAsIDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfSU5JVF9SQU1fQUREUiArIDEyICogMTAyNCksCisJCQkwLDAsMCwwLDAsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfSU5JVF9SQU1fQUREUiArIDEyICogMTAyNCksCisJCQkwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisKKwkvKgorCSAqIFRMQiAwOgk2NE0JTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqIDB4ZmMwMDAwMDAJNjRNCUNvdmVycyBGTEFTSCBhdCAweEZFODAwMDAwIGFuZCAweEZGODAwMDAwCisJICogT3V0IG9mIHJlc2V0IHRoaXMgZW50cnkgaXMgb25seSA0Sy4KKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzY0TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19CT09UX0JMT0NLKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0JPT1RfQkxPQ0spLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEIgMToJMUcJTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqIDB4ODAwMDAwMDAJMUcJUENJRSAgOCw5LGEsYgorCSAqLworCS5sb25nIFRMQjFfTUFTMCgxLCAxLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfMUcpCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfUENJRV9QSFlTKSwKKwkJMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX1BDSUVfUEhZUyksCisJCTAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKwkvKgorCSAqIFRMQiAyOgkyNTZNCU5vbi1jYWNoZWFibGUsIGd1YXJkZWQKKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgMiwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzI1Nk0pCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfUENJX1BIWVMpLAorCQkJMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX1BDSV9QSFlTKSwJMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS8qCisJICogVExCIDM6CTI1Nk0JTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqLworCS5sb25nIFRMQjFfTUFTMCgxLCAzLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfMjU2TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19QQ0lfUEhZUyArIDB4MTAwMDAwMDApLAorCQkJMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX1BDSV9QSFlTICsgMHgxMDAwMDAwMCksCisJCQkwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEIgNDoJNjRNCU5vbi1jYWNoZWFibGUsIGd1YXJkZWQKKwkgKiAweGUwMDBfMDAwMAkxTQlDQ1NSQkFSCisJICogMHhlMTAwXzAwMDAJMjU1TQlQQ0kgSU8gcmFuZ2UKKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgNCwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzY0TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19DQ1NSQkFSKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0NDU1JCQVIpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisjaWZkZWYgQ0ZHX0xCQ19DQUNIRV9CQVNFCisJLyoKKwkgKiBUTEIgNToJNjRNCUNhY2hlYWJsZSwgbm9uLWd1YXJkZWQKKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgNSwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzY0TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19MQkNfQ0FDSEVfQkFTRSksIDAsMCwwLDAsMCwwLDAsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19MQkNfQ0FDSEVfQkFTRSksIDAsMCwwLDAsMCwxLDAsMSwwLDEpCisjZW5kaWYKKwkvKgorCSAqIFRMQiA2Ogk2NE0JTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqIDB4ZjgwMDAwMDAJNjRNCVBJWElTIDB4RjgwMDAwMDAgLSAweEZCRkZGRkZGCisJICovCisJLmxvbmcgVExCMV9NQVMwKDEsIDYsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDEsIDAsIDAsIEJPT0tFX1BBR0VTWl82NE0pCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfTEJDX05PTkNBQ0hFX0JBU0UpLCAwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfTEJDX05PTkNBQ0hFX0JBU0UpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorMjoKKwllbnRyeV9lbmQKKworLyoKKyAqIExBVyhMb2NhbCBBY2Nlc3MgV2luZG93KSBjb25maWd1cmF0aW9uOgorICoKKyAqCisgKiBOb3RlczoKKyAqICAgIENDU1JCQVIgYW5kIEwyLWFzLVNSQU0gZG9uJ3QgbmVlZCBhIGNvbmZpZ3VyZWQgTG9jYWwgQWNjZXNzIFdpbmRvdy4KKyAqICAgIElmIGZsYXNoIGlzIDhNIGF0IGRlZmF1bHQgcG9zaXRpb24gKGxhc3QgOE0pLCBubyBMQVcgbmVlZGVkLgorICoKKyAqIExBVyAwIGlzIHJlc2VydmVkIGZvciBib290IG1hcHBpbmcKKyAqLworCisJLnNlY3Rpb24gLmJvb3RwZywgImF4IgorCS5nbG9ibAlsYXdfZW50cnkKK2xhd19lbnRyeToKKwllbnRyeV9zdGFydAorCisJLmxvbmcgKDRmLTNmKS84CiszOgorCS5sb25nCTAKKwkubG9uZwkoTEFXQVJfVFJHVF9ERFIgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMTI4TSkpICYgfkxBV0FSX0VOCisKKwkubG9uZwkoQ0ZHX1BDSTFfTUVNX0JBU0U+PjEyKSAmIDB4ZmZmZmYKKwkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfUENJMSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKQorCisJLmxvbmcJKENGR19QQ0kxX0lPX1BIWVM+PjEyKSAmIDB4ZmZmZmYKKwkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfUENJMSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xNk0pCisKKwkubG9uZwkoQ0ZHX0xCQ19DQUNIRV9CQVNFPj4xMikgJiAweGZmZmZmCisJLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0xCQyB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8yNTZNKQorCisJLmxvbmcJKENGR19QQ0lFMV9NRU1fUEhZUz4+MTIpICYgMHhmZmZmZgorCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9QQ0lFMSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8yNTZNKQorCisJLyogVG8ga2VlcCB0byAxMCBMQVdzLCBQQ0lFMV9JT19QSFlTIG11c3QgdXNlIHRvcCBvZiBtZW0gcmVnaW9uICAqLworCisJLmxvbmcJKENGR19QQ0lFMl9NRU1fUEhZUz4+MTIpICYgMHhmZmZmZgorCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9QQ0lFMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKQorCisJLmxvbmcJKENGR19QQ0lFMl9JT19QSFlTPj4xMikgJiAweGZmZmZmCisJLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX1BDSUUyIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzE2TSkKKworCS5sb25nCShDRkdfUENJRTNfTUVNX1BIWVM+PjEyKSAmIDB4ZmZmZmYKKwkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfUENJRTMgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMjU2TSkKKworCS5sb25nCShDRkdfUENJRTNfSU9fUEhZUz4+MTIpICYgMHhmZmZmZgorCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9QQ0lFMyB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xNk0pCis0OgorCWVudHJ5X2VuZApkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy9tcGM4NTQ0ZHMuYyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvbXBjODU0NGRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmMWRhOQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvbXBjODU0NGRzLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9pbW1hcF84NXh4Lmg+CisjaW5jbHVkZSA8c3BkLmg+CisjaW5jbHVkZSA8bWlpcGh5Lmg+CisKKyNpbmNsdWRlICIuLi9jb21tb24vcGl4aXMuaCIKKworI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkKKyNpbmNsdWRlIDxmdF9idWlsZC5oPgorZXh0ZXJuIHZvaWQgZnRfY3B1X3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQorZXh0ZXJuIHZvaWQgZGRyX2VuYWJsZV9lY2ModW5zaWduZWQgaW50IGRyYW1fc2l6ZSk7CisjZW5kaWYKKworZXh0ZXJuIGxvbmcgaW50IHNwZF9zZHJhbSh2b2lkKTsKKwordm9pZCBzZHJhbV9pbml0KHZvaWQpOworCitpbnQgYm9hcmRfZWFybHlfaW5pdF9mICh2b2lkKQoreworCXJldHVybiAwOworfQorCitpbnQgY2hlY2tib2FyZCAodm9pZCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19DQ1NSQkFSOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOworCisJaWYgKCh1aW50KSZndXItPnBvcnBsbHNyICE9IDB4ZTAwZTAwMDApIHsKKwkJcHJpbnRmKCJpbW1hcCBzaXplIGVycm9yICV4XG4iLCZndXItPnBvcnBsbHNyKTsKKwl9CisJcHJpbnRmICgiQm9hcmQ6IE1QQzg1NDREU1xuIik7CisKKwlyZXR1cm4gMDsKK30KKworbG9uZyBpbnQKK2luaXRkcmFtKGludCBib2FyZF90eXBlKQoreworCWxvbmcgZHJhbV9zaXplID0gMDsKKworCXB1dHMoIkluaXRpYWxpemluZ1xuIik7CisKKwlkcmFtX3NpemUgPSBzcGRfc2RyYW0oKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpICYmICFkZWZpbmVkKENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUikKKwkvKgorCSAqIEluaXRpYWxpemUgYW5kIGVuYWJsZSBERFIgRUNDLgorCSAqLworCWRkcl9lbmFibGVfZWNjKGRyYW1fc2l6ZSk7CisjZW5kaWYKKwlwdXRzKCIgICAgRERSOiAiKTsKKwlyZXR1cm4gZHJhbV9zaXplOworfQorCisjaWYgZGVmaW5lZChDRkdfRFJBTV9URVNUKQoraW50Cit0ZXN0ZHJhbSh2b2lkKQoreworCXVpbnQgKnBzdGFydCA9ICh1aW50ICopIENGR19NRU1URVNUX1NUQVJUOworCXVpbnQgKnBlbmQgPSAodWludCAqKSBDRkdfTUVNVEVTVF9FTkQ7CisJdWludCAqcDsKKworCXByaW50ZigiVGVzdGluZyBEUkFNIGZyb20gMHglMDh4IHRvIDB4JTA4eFxuIiwKKwkgICAgICAgQ0ZHX01FTVRFU1RfU1RBUlQsCisJICAgICAgIENGR19NRU1URVNUX0VORCk7CisKKwlwcmludGYoIkRSQU0gdGVzdCBwaGFzZSAxOlxuIik7CisJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKQorCQkqcCA9IDB4YWFhYWFhYWE7CisKKwlmb3IgKHAgPSBwc3RhcnQ7IHAgPCBwZW5kOyBwKyspIHsKKwkJaWYgKCpwICE9IDB4YWFhYWFhYWEpIHsKKwkJCXByaW50ZiAoIkRSQU0gdGVzdCBmYWlscyBhdDogJTA4eFxuIiwgKHVpbnQpIHApOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlwcmludGYoIkRSQU0gdGVzdCBwaGFzZSAyOlxuIik7CisJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKQorCQkqcCA9IDB4NTU1NTU1NTU7CisKKwlmb3IgKHAgPSBwc3RhcnQ7IHAgPCBwZW5kOyBwKyspIHsKKwkJaWYgKCpwICE9IDB4NTU1NTU1NTUpIHsKKwkJCXByaW50ZiAoIkRSQU0gdGVzdCBmYWlscyBhdDogJTA4eFxuIiwgKHVpbnQpIHApOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlwcmludGYoIkRSQU0gdGVzdCBwYXNzZWQuXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitpbnQgbGFzdF9zdGFnZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKwordW5zaWduZWQgbG9uZworZ2V0X2JvYXJkX3N5c19jbGsodWxvbmcgZHVtbXkpCit7CisJdTggaSwgZ29fYml0LCByZF9jbGtzOworCXVsb25nIHZhbCA9IDA7CisKKwlnb19iaXQgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwpOworCWdvX2JpdCAmPSAweDAxOworCisJcmRfY2xrcyA9IGluOChQSVhJU19CQVNFICsgUElYSVNfVkNGR0VOMCk7CisJcmRfY2xrcyAmPSAweDFDOworCisJLyoKKwkgKiBPbmx5IGlmIGJvdGggZ28gYml0IGFuZCB0aGUgU0NMSyBiaXQgaW4gVkNGR0VOMCBhcmUgc2V0CisJICogc2hvdWxkIHdlIGJlIHVzaW5nIHRoZSBBVVggcmVnaXN0ZXIuIFJlbWVtYmVyLCB3ZSBhbHNvIHNldCB0aGUKKwkgKiBHTyBiaXQgdG8gYm9vdCBmcm9tIHRoZSBhbHRlcm5hdGUgYmFuayBvbiB0aGUgb24tYm9hcmQgZmxhc2gKKwkgKi8KKworCWlmIChnb19iaXQpIHsKKwkJaWYgKHJkX2Nsa3MgPT0gMHgxYykKKwkJCWkgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX0FVWCk7CisJCWVsc2UKKwkJCWkgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1NQRCk7CisJfSBlbHNlIHsKKwkJaSA9IGluOChQSVhJU19CQVNFICsgUElYSVNfU1BEKTsKKwl9CisKKwlpICY9IDB4MDc7CisKKwlzd2l0Y2ggKGkpIHsKKwljYXNlIDA6CisJCXZhbCA9IDMzMzMzMzMzOworCQlicmVhazsKKwljYXNlIDE6CisJCXZhbCA9IDQwMDAwMDAwOworCQlicmVhazsKKwljYXNlIDI6CisJCXZhbCA9IDUwMDAwMDAwOworCQlicmVhazsKKwljYXNlIDM6CisJCXZhbCA9IDY2NjY2NjY2OworCQlicmVhazsKKwljYXNlIDQ6CisJCXZhbCA9IDgzMDAwMDAwOworCQlicmVhazsKKwljYXNlIDU6CisJCXZhbCA9IDEwMDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQl2YWwgPSAxMzMzMzMzMzM7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJdmFsID0gMTY2NjY2NjY2OworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkKK3ZvaWQKK2Z0X2JvYXJkX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCXUzMiAqcDsKKwlpbnQgbGVuOworCisJZnRfY3B1X3NldHVwKGJsb2IsIGJkKTsKKworCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiL21lbW9yeS9yZWciLCAmbGVuKTsKKwlpZiAocCAhPSBOVUxMKSB7CisJCSpwKysgPSBjcHVfdG9fYmUzMihiZC0+YmlfbWVtc3RhcnQpOworCQkqcCA9IGNwdV90b19iZTMyKGJkLT5iaV9tZW1zaXplKTsKKwl9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvdS1ib290LmxkcyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYThhYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CisvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPworICAgX19EWU5BTUlDID0gMDsgICAgKi8KK1NFQ1RJT05TCit7CisgIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKKyAgeworICAgICooLnJlc2V0dmVjKQorICB9ID0gMHhmZmZmCisKKyAgLmJvb3RwZyAweEZGRkZGMDAwIDoKKyAgeworICAgIGNwdS9tcGM4NXh4L3N0YXJ0Lm8JKC5ib290cGcpCisgICAgYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy9pbml0Lm8gKC5ib290cGcpCisgIH0gPSAweGZmZmYKKworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9ICsgU0laRU9GX0hFQURFUlM7CisgIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQorICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KKyAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KKyAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KKyAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQorICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KSAJfQorICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9CisgIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpIAl9CisgIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKSAJfQorICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpIAl9CisgIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQorICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9CisgIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KKyAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KKyAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQorICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQorICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KKyAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQorICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KKyAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQorICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQorICAucGx0IDogeyAqKC5wbHQpIH0KKyAgLnRleHQgICAgICA6CisgIHsKKyAgICBjcHUvbXBjODV4eC9zdGFydC5vCSgudGV4dCkKKyAgICBib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL2luaXQubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvdHJhcHMubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvaW50ZXJydXB0cy5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9jcHVfaW5pdC5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9jcHUubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvc3BlZWQubyAoLnRleHQpCisgICAgY29tbW9uL2RsbWFsbG9jLm8gKC50ZXh0KQorICAgIGxpYl9nZW5lcmljL2NyYzMyLm8gKC50ZXh0KQorICAgIGxpYl9wcGMvZXh0YWJsZS5vICgudGV4dCkKKyAgICBsaWJfZ2VuZXJpYy96bGliLm8gKC50ZXh0KQorICAgICooLnRleHQpCisgICAgKiguZml4dXApCisgICAgKiguZ290MSkKKyAgIH0KKyAgICBfZXRleHQgPSAuOworICAgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgICAgLnJvZGF0YSAgICA6CisgICB7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgICAqKC5laF9mcmFtZSkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMjsKKyAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKSA+PiAyOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIC4gPSAuOworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworICAuID0gLjsKKyAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CisgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKworICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2VuZCA9IC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykgKiguc2NvbW1vbikKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICB9CisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9peGRwNDI1L2NvbmZpZy5tayBiL2JvYXJkL2l4ZHA0MjUvY29uZmlnLm1rCmluZGV4IGQ0OWMwZTcuLmVjZmY4ZDcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2l4ZHA0MjUvY29uZmlnLm1rCisrKyBiL2JvYXJkL2l4ZHA0MjUvY29uZmlnLm1rCkBAIC0xLDQgKzEsMiBAQAorIwogVEVYVF9CQVNFID0gMHgwMGY4MDAwMAotCi0jIGluY2x1ZGUgTlBFIGV0aGVybmV0IGRyaXZlcgotQk9BUkRMSUJTID0gJChvYmopY3B1L2l4cC9ucGUvbGlibnBlLmEKZGlmZiAtLWdpdCBhL2JvYXJkL2xwYzIyOTJzb2RpbW0vTWFrZWZpbGUgYi9ib2FyZC9scGMyMjkyc29kaW1tL01ha2VmaWxlCmluZGV4IDVhMzAxOTguLjE4YTk1ZDcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2xwYzIyOTJzb2RpbW0vTWFrZWZpbGUKKysrIGIvYm9hcmQvbHBjMjI5MnNvZGltbS9NYWtlZmlsZQpAQCAtMSw3ICsxLDYgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAyCi0jIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgotIyBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CisjIChDKSBDb3B5cmlnaHQgMjAwNworIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogIyBwcm9qZWN0LgpAQCAtMjQsMzUgKzIzLDI5IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gbHBjMjI5MnNvZGltbS5vIGZsYXNoLm8gbW1jLm8gc3BpLm8gbW1jX2h3Lm8gZXRoLm8KLVNPQkpTCTo9IGxvd2xldmVsX2luaXQubyBpYXBfZW50cnkubworQ09CSlMJOj0gZmxhc2gubyBscGMyMjkyc29kaW1tLm8KK1NPQkpUUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKVFM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpUUykpCiAKLSMgdGhpcyBNVVNUIGJlIGNvbXBpbGVkIGFzIHRodW1iIGNvZGUhCi1pYXBfZW50cnkubzoKLQlhcm0tbGludXgtZ2NjICAtRF9fQVNTRU1CTFlfXyAtZyAgLU9zICAgLWZuby1zdHJpY3QtYWxpYXNpbmcgIFwKLQktZm5vLWNvbW1vbiAtZmZpeGVkLXI4IC1tc29mdC1mbG9hdCAgLURfX0tFUk5FTF9fIFwKLQktRFRFWFRfQkFTRT0weDgxNTAwMDAwICAtSS9ob21lL2dhcnlqL3Byb2ovTFBDL3UtYm9vdC9pbmNsdWRlIFwKLQktZm5vLWJ1aWx0aW4gLWZmcmVlc3RhbmRpbmcgLW5vc3RkaW5jIC1pc3lzdGVtIFwKLQkvb3B0L2VsZGsvYXJtL3Vzci9iaW4vLi4vbGliL2djYy9hcm0tbGludXgvNC4wLjAvaW5jbHVkZSAtcGlwZSAgXAotCS1EQ09ORklHX0FSTSAtRF9fQVJNX18gLW1hcmNoPWFybXY0dCAtbXR1bmU9YXJtN3RkbWkgLW1hYmk9YXBjcy1nbnUgXAotCS1jIC1vIGlhcF9lbnRyeS5vIGlhcF9lbnRyeS5TCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKIAogZGlzdGNsZWFuOgljbGVhbgotCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbHBjMjI5MnNvZGltbS9mbGFzaC5jIGIvYm9hcmQvbHBjMjI5MnNvZGltbS9mbGFzaC5jCmluZGV4IDU1YWFhYmYuLjBmYjA4NDMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2xwYzIyOTJzb2RpbW0vZmxhc2guYworKysgYi9ib2FyZC9scGMyMjkyc29kaW1tL2ZsYXNoLmMKQEAgLTEsNiArMSw5IEBACiAvKgogICogKEMpIENvcHlyaWdodCAyMDA2IEVtYmVkZGVkIEFydGlzdHMgQUIgPHd3dy5lbWJlZGRlZGFydGlzdHMuY29tPgogICoKKyAqIE1vZGlmaWVkIHRvIHVzZSB0aGUgcm91dGluZXMgaW4gY3B1L2FybTcyMHQvbHBjMjI5Mi9mbGFzaC5jIGJ5CisgKiBHYXJ5IEplbm5lam9obiA8Z2FyeWpAZGVueCxkZT4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKQEAgLTIwLDg0ICsyMywxNiBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CiAKLS8qIElBUCBjb21tYW5kcyB1c2UgMzIgYnl0ZXMgYXQgdGhlIHRvcCBvZiBDUFUgaW50ZXJuYWwgc3JhbSwgd2UKLSAgIHVzZSA1MTIgYnl0ZXMgYmVsb3cgdGhhdCAqLwotI2RlZmluZSBDT1BZX0JVRkZFUl9MT0NBVElPTiAweDQwMDAzZGUwCi0KLSNkZWZpbmUgSUFQX0xPQ0FUSU9OIDB4N2ZmZmZmZjEKLSNkZWZpbmUgSUFQX0NNRF9QUkVQQVJFIDUwCi0jZGVmaW5lIElBUF9DTURfQ09QWSA1MQotI2RlZmluZSBJQVBfQ01EX0VSQVNFIDUyCi0jZGVmaW5lIElBUF9DTURfQ0hFQ0sgNTMKLSNkZWZpbmUgSUFQX0NNRF9JRCA1NAotI2RlZmluZSBJQVBfQ01EX1ZFUlNJT04gNTUKLSNkZWZpbmUgSUFQX0NNRF9DT01QQVJFIDU2Ci0KLSNkZWZpbmUgSUFQX1JFVF9DTURfU1VDQ0VTUyAwCi0KICNkZWZpbmUgU1NUX0JBU0VBRERSIDB4ODAwMDAwMDAKICNkZWZpbmUgU1NUX0FERFIxICgodm9sYXRpbGUgdXNob3J0KikoU1NUX0JBU0VBRERSICsgKDB4NTU1NSA8PCAxKSkpCiAjZGVmaW5lIFNTVF9BRERSMiAoKHZvbGF0aWxlIHVzaG9ydCopKFNTVF9CQVNFQUREUiArICgweDJBQUEgPDwgMSkpKQogCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbW1hbmRbNV07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyByZXN1bHRbMl07CiAKIGZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOwogCi1leHRlcm4gdm9pZCBpYXBfZW50cnkodW5zaWduZWQgbG9uZyAqIGNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgKiByZXN1bHQpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICovCi1pbnQgZ2V0X2ZsYXNoX3NlY3RvcihmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBmbGFzaF9hZGRyKQotewotCWludCBpOwotCi0JZm9yKGk9MTsgaSA8IChpbmZvLT5zZWN0b3JfY291bnQpOyBpKyspIHsKLQkJaWYgKGZsYXNoX2FkZHIgPCAoaW5mby0+c3RhcnRbaV0pKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIChpLTEpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBmbGFzaF9hZGRyIGlzIGFsaWduZWQgb24gNTEyIGJ5dGVzIGJvdW5kYXJ5Ci0gKiBpbiBmbGFzaC4gVGhpcyBmdW5jdGlvbiBhbHNvIGFzc3VtZXMgdGhhdCBwcmVwYXJlIGhhdmUgYmVlbiBjYWxsZWQKLSAqIGZvciB0aGUgc2VjdG9yIGluIHF1ZXN0aW9uLgotICovCi1pbnQgY29weV9idWZmZXJfdG9fZmxhc2goZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZmxhc2hfYWRkcikKLXsKLQlpbnQgZmlyc3Rfc2VjdG9yOwotCWludCBsYXN0X3NlY3RvcjsKLQotCWZpcnN0X3NlY3RvciA9IGdldF9mbGFzaF9zZWN0b3IoaW5mbywgZmxhc2hfYWRkcik7Ci0JbGFzdF9zZWN0b3IgPSBnZXRfZmxhc2hfc2VjdG9yKGluZm8sIGZsYXNoX2FkZHIgKyA1MTIgLSAxKTsKLQotCS8qIHByZXBhcmUgc2VjdG9ycyBmb3Igd3JpdGUgKi8KLQljb21tYW5kWzBdID0gSUFQX0NNRF9QUkVQQVJFOwotCWNvbW1hbmRbMV0gPSBmaXJzdF9zZWN0b3I7Ci0JY29tbWFuZFsyXSA9IGxhc3Rfc2VjdG9yOwotCWlhcF9lbnRyeShjb21tYW5kLCByZXN1bHQpOwotCWlmIChyZXN1bHRbMF0gIT0gSUFQX1JFVF9DTURfU1VDQ0VTUykgewotCQlwcmludGYoIklBUCBwcmVwYXJlIGZhaWxlZFxuIik7Ci0JCXJldHVybiBFUlJfUFJPR19FUlJPUjsKLQl9Ci0KLQljb21tYW5kWzBdID0gSUFQX0NNRF9DT1BZOwotCWNvbW1hbmRbMV0gPSBmbGFzaF9hZGRyOwotCWNvbW1hbmRbMl0gPSBDT1BZX0JVRkZFUl9MT0NBVElPTjsKLQljb21tYW5kWzNdID0gNTEyOwotCWNvbW1hbmRbNF0gPSBDRkdfU1lTX0NMS19GUkVRID4+IDEwOwotCWlhcF9lbnRyeShjb21tYW5kLCByZXN1bHQpOwotCWlmIChyZXN1bHRbMF0gIT0gSUFQX1JFVF9DTURfU1VDQ0VTUykgewotCQlwcmludGYoIklBUCBjb3B5IGZhaWxlZFxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQorZXh0ZXJuIGludCBscGMyMjkyX2NvcHlfYnVmZmVyX3RvX2ZsYXNoKGZsYXNoX2luZm9fdCAqLCB1bG9uZyk7CitleHRlcm4gaW50IGxwYzIyOTJfZmxhc2hfZXJhc2UoZmxhc2hfaW5mb190ICosIGludCwgaW50KTsKK2V4dGVybiBpbnQgbHBjMjI5Ml93cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKiwgdWNoYXIgKiwgdWxvbmcsIHVsb25nKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKQEAgLTIyMCw1NiArMTU1LDYgQEAKIAlwcmludGYgKCJcbiIpOwogfQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotaW50IGZsYXNoX2VyYXNlX3BoaWxpcHMgKGZsYXNoX2luZm9fdCAqIGluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQotewotCWludCBmbGFnOwotCWludCBwcm90OwotCWludCBzZWN0OwotCi0JcHJvdCA9IDA7Ci0JZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7ICsrc2VjdCkgewotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgewotCQkJcHJvdCsrOwotCQl9Ci0JfQotCWlmIChwcm90KQotCQlyZXR1cm4gRVJSX1BST1RFQ1RFRDsKLQotCi0JZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotCi0JcHJpbnRmICgiRXJhc2luZyAlZCBzZWN0b3JzIHN0YXJ0aW5nIGF0IHNlY3RvciAlMmQuXG4iCi0JIlRoaXMgbWFrZSB0YWtlIHNvbWUgdGltZSAuLi4gIiwKLQlzX2xhc3QgLSBzX2ZpcnN0ICsgMSwgc19maXJzdCk7Ci0KLQljb21tYW5kWzBdID0gSUFQX0NNRF9QUkVQQVJFOwotCWNvbW1hbmRbMV0gPSBzX2ZpcnN0OwotCWNvbW1hbmRbMl0gPSBzX2xhc3Q7Ci0JaWFwX2VudHJ5KGNvbW1hbmQsIHJlc3VsdCk7Ci0JaWYgKHJlc3VsdFswXSAhPSBJQVBfUkVUX0NNRF9TVUNDRVNTKSB7Ci0JCXByaW50ZigiSUFQIHByZXBhcmUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIEVSUl9QUk9URUNURUQ7Ci0JfQotCi0JY29tbWFuZFswXSA9IElBUF9DTURfRVJBU0U7Ci0JY29tbWFuZFsxXSA9IHNfZmlyc3Q7Ci0JY29tbWFuZFsyXSA9IHNfbGFzdDsKLQljb21tYW5kWzNdID0gQ0ZHX1NZU19DTEtfRlJFUSA+PiAxMDsKLQlpYXBfZW50cnkoY29tbWFuZCwgcmVzdWx0KTsKLQlpZiAocmVzdWx0WzBdICE9IElBUF9SRVRfQ01EX1NVQ0NFU1MpIHsKLQkJcHJpbnRmKCJJQVAgZXJhc2UgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIEVSUl9QUk9URUNURUQ7Ci0JfQotCi0JaWYgKGZsYWcpCi0JCWVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQlyZXR1cm4gRVJSX09LOwotfQotCiBpbnQgZmxhc2hfZXJhc2Vfc3N0IChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKIHsKIAlpbnQgaTsKQEAgLTI5NCw3ICsxNzksNyBAQAogCQljYXNlIChTU1RfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSyk6CiAJCQlyZXR1cm4gZmxhc2hfZXJhc2Vfc3N0KGluZm8sIHNfZmlyc3QsIHNfbGFzdCk7CiAJCWNhc2UgKFBISUxJUFNfTFBDMjI5MiAmIEZMQVNIX1ZFTkRNQVNLKToKLQkJCXJldHVybiBmbGFzaF9lcmFzZV9waGlsaXBzKGluZm8sIHNfZmlyc3QsIHNfbGFzdCk7CisJCQlyZXR1cm4gbHBjMjI5Ml9mbGFzaF9lcmFzZShpbmZvLCBzX2ZpcnN0LCBzX2xhc3QpOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIEVSUl9QUk9URUNURUQ7CiAJfQpAQCAtMzUzLDEyMiArMjM4LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHdyaXRlX2J1ZmZfcGhpbGlwcyAoZmxhc2hfaW5mb190ICogaW5mbywKLQkJCXVjaGFyICogc3JjLAotCQkJdWxvbmcgYWRkciwKLQkJCXVsb25nIGNudCkKLXsKLQlpbnQgZmlyc3RfY29weV9zaXplOwotCWludCBsYXN0X2NvcHlfc2l6ZTsKLQlpbnQgZmlyc3RfYmxvY2s7Ci0JaW50IGxhc3RfYmxvY2s7Ci0JaW50IG5icl9taWRfYmxvY2tzOwotCXVjaGFyIG1lbW1hcF92YWx1ZTsKLQl1bG9uZyBpOwotCXVjaGFyKiBzcmNfb3JnOwotCXVjaGFyKiBkc3Rfb3JnOwotCWludCByZXQgPSBFUlJfT0s7Ci0KLQlzcmNfb3JnID0gc3JjOwotCWRzdF9vcmcgPSAodWNoYXIqKWFkZHI7Ci0KLQlmaXJzdF9ibG9jayA9IGFkZHIgLyA1MTI7Ci0JbGFzdF9ibG9jayA9IChhZGRyICsgY250KSAvIDUxMjsKLQluYnJfbWlkX2Jsb2NrcyA9IGxhc3RfYmxvY2sgLSBmaXJzdF9ibG9jayAtIDE7Ci0KLQlmaXJzdF9jb3B5X3NpemUgPSA1MTIgLSAoYWRkciAlIDUxMik7Ci0JbGFzdF9jb3B5X3NpemUgPSAoYWRkciArIGNudCkgJSA1MTI7Ci0KLSNpZiAwCi0JcHJpbnRmKCJcbmNvcHkgZmlyc3QgYmxvY2s6ICgxKSAlbFggLT4gJWxYIDB4MjAwIGJ5dGVzLCAiCi0JCSIoMikgJWxYIC0+ICVsWCAweCVYIGJ5dGVzLCAoMykgJWxYIC0+ICVsWCAweDIwMCBieXRlc1xuIiwKLQkodWxvbmcpKGZpcnN0X2Jsb2NrICogNTEyKSwKLQkodWxvbmcpQ09QWV9CVUZGRVJfTE9DQVRJT04sCi0JKHVsb25nKXNyYywKLQkodWxvbmcpKENPUFlfQlVGRkVSX0xPQ0FUSU9OICsgNTEyIC0gZmlyc3RfY29weV9zaXplKSwKLQlmaXJzdF9jb3B5X3NpemUsCi0JKHVsb25nKUNPUFlfQlVGRkVSX0xPQ0FUSU9OLAotCSh1bG9uZykoZmlyc3RfYmxvY2sgKiA1MTIpKTsKLSNlbmRpZgotCi0JLyogY29weSBmaXJzdCBibG9jayAqLwotCW1lbWNweSgodm9pZCopQ09QWV9CVUZGRVJfTE9DQVRJT04sCi0JCSh2b2lkKikoZmlyc3RfYmxvY2sgKiA1MTIpLCA1MTIpOwotCW1lbWNweSgodm9pZCopKENPUFlfQlVGRkVSX0xPQ0FUSU9OICsgNTEyIC0gZmlyc3RfY29weV9zaXplKSwKLQkJc3JjLCBmaXJzdF9jb3B5X3NpemUpOwotCWNvcHlfYnVmZmVyX3RvX2ZsYXNoKGluZm8sIGZpcnN0X2Jsb2NrICogNTEyKTsKLQlzcmMgKz0gZmlyc3RfY29weV9zaXplOwotCWFkZHIgKz0gZmlyc3RfY29weV9zaXplOwotCi0JLyogY29weSBtaWRkbGUgYmxvY2tzICovCi0JZm9yIChpID0gMDsgaSA8IG5icl9taWRfYmxvY2tzOyBpKyspIHsKLSNpZiAwCi0JCXByaW50ZigiY29weSBtaWRkbGUgYmxvY2s6ICVsWCAtPiAlbFggNTEyIGJ5dGVzLCAiCi0JCSIlbFggLT4gJWxYIDUxMiBieXRlc1xuIiwKLQkJKHVsb25nKXNyYywKLQkJKHVsb25nKUNPUFlfQlVGRkVSX0xPQ0FUSU9OLAotCQkodWxvbmcpQ09QWV9CVUZGRVJfTE9DQVRJT04sCi0JCSh1bG9uZylhZGRyKTsKLSNlbmRpZgotCQltZW1jcHkoKHZvaWQqKUNPUFlfQlVGRkVSX0xPQ0FUSU9OLCBzcmMsIDUxMik7Ci0JCWNvcHlfYnVmZmVyX3RvX2ZsYXNoKGluZm8sIGFkZHIpOwotCQlzcmMgKz0gNTEyOwotCQlhZGRyICs9IDUxMjsKLQl9Ci0KLQotCWlmIChsYXN0X2NvcHlfc2l6ZSA+IDApIHsKLSNpZiAwCi0JCXByaW50ZigiY29weSBsYXN0IGJsb2NrOiAoMSkgJWxYIC0+ICVsWCAweDIwMCBieXRlcywgIgotCQkiKDIpICVsWCAtPiAlbFggMHglWCBieXRlcywgKDMpICVsWCAtPiAlbFggeDIwMCBieXRlc1xuIiwKLQkJKHVsb25nKShsYXN0X2Jsb2NrICogNTEyKSwKLQkJKHVsb25nKUNPUFlfQlVGRkVSX0xPQ0FUSU9OLAotCQkodWxvbmcpc3JjLAotCQkodWxvbmcpKENPUFlfQlVGRkVSX0xPQ0FUSU9OKSwKLQkJbGFzdF9jb3B5X3NpemUsCi0JCSh1bG9uZylDT1BZX0JVRkZFUl9MT0NBVElPTiwKLQkJKHVsb25nKWFkZHIpOwotI2VuZGlmCi0JCS8qIGNvcHkgbGFzdCBibG9jayAqLwotCQltZW1jcHkoKHZvaWQqKUNPUFlfQlVGRkVSX0xPQ0FUSU9OLAotCQkJKHZvaWQqKShsYXN0X2Jsb2NrICogNTEyKSwgNTEyKTsKLQkJbWVtY3B5KCh2b2lkKilDT1BZX0JVRkZFUl9MT0NBVElPTiwKLQkJCXNyYywgbGFzdF9jb3B5X3NpemUpOwotCQljb3B5X2J1ZmZlcl90b19mbGFzaChpbmZvLCBhZGRyKTsKLQl9Ci0KLQkvKiB2ZXJpZnkgd3JpdGUgKi8KLQltZW1tYXBfdmFsdWUgPSBHRVQ4KE1FTU1BUCk7Ci0KLQlkaXNhYmxlX2ludGVycnVwdHMoKTsKLQotCVBVVDgoTUVNTUFQLCAwMSk7CQkvKiB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IGluaXRpYWwgNjQKLQkJCQkJCQkgICBieXRlcyBhcmUgdGFrZW4gZnJvbSBmbGFzaCB3aGVuIHdlCi0JCQkJCQkJICAgZG8gdGhlIGNvbXBhcmUgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQlpZiAoKmRzdF9vcmcgIT0gKnNyY19vcmcpewotCQkJcHJpbnRmKCJXcml0ZSBmYWlsZWQuIEJ5dGUgJWxYIGRpZmZlcnNcbiIsIGkpOwotCQkJcmV0ID0gRVJSX1BST0dfRVJST1I7Ci0JCQlicmVhazsKLQkJfQotCQlkc3Rfb3JnKys7Ci0JCXNyY19vcmcrKzsKLQl9Ci0KLQlQVVQ4KE1FTU1BUCwgbWVtbWFwX3ZhbHVlKTsKLQllbmFibGVfaW50ZXJydXB0cygpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyICogc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCiB7CiAJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSB7CiAJCWNhc2UgKFNTVF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKToKIAkJCXJldHVybiB3cml0ZV9idWZmX3NzdChpbmZvLCBzcmMsIGFkZHIsIGNudCk7CiAJCWNhc2UgKFBISUxJUFNfTFBDMjI5MiAmIEZMQVNIX1ZFTkRNQVNLKToKLQkJCXJldHVybiB3cml0ZV9idWZmX3BoaWxpcHMoaW5mbywgc3JjLCBhZGRyLCBjbnQpOworCQkJcmV0dXJuIGxwYzIyOTJfd3JpdGVfYnVmZihpbmZvLCBzcmMsIGFkZHIsIGNudCk7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gRVJSX1BST0dfRVJST1I7CiAJfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbW90aW9ucHJvL21vdGlvbnByby5jIGIvYm9hcmQvbW90aW9ucHJvL21vdGlvbnByby5jCmluZGV4IGQ2MGQyMzMuLjZlYjVmZTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL21vdGlvbnByby9tb3Rpb25wcm8uYworKysgYi9ib2FyZC9tb3Rpb25wcm8vbW90aW9ucHJvLmMKQEAgLTI4LDcgKzI4LDE0IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxtcGM1eHh4Lmg+CisjaW5jbHVkZSA8bWlpcGh5Lmg+CisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKQorI2luY2x1ZGUgPGZ0X2J1aWxkLmg+CisjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1NUQVRVU19MRUQpCisjaW5jbHVkZSA8c3RhdHVzX2xlZC5oPgorI2VuZGlmIC8qIENPTkZJR19TVEFUVVNfTEVEICovCiAKIC8qIEtvbGxtb3JnZW4gRFBSIGluaXRpYWxpemF0aW9uIGRhdGEgKi8KIHN0cnVjdCBpbml0X2VsZW0gewpAQCAtNzUsMTEgKzgyLDI3IEBACiB9CiAKIAorLyoKKyAqIEFkZGl0aW9uYWwgUEhZIGludGlhbGl6YXRpb24uIEFmdGVyIGJlaW5nIHJlc2V0IGluIG1wYzV4eHhfZmVjX2luaXRfcGh5KCksCisgKiBQSFkgZ29lcyBpbnRvIEZYIG1vZGUuICBUbyB0YWtlIGl0IG91dCBvZiB0aGUgRlggbW9kZSBhbmQgc3dpdGNoIGludG8KKyAqIGRlc2lyZWQgVFggb3BlcmF0aW9uLCBvbmUgbmVlZHMgdG8gY2xlYXIgdGhlIEZYX1NFTCBiaXQgb2YgTW9kZSBDb250cm9sCisgKiBSZWdpc3Rlci4KKyAqLwordm9pZCByZXNldF9waHkodm9pZCkKK3sKKwl1bnNpZ25lZCBzaG9ydCBtb2RlX2NvbnRyb2w7CisKKwltaWlwaHlfcmVhZCgiRkVDIEVUSEVSTkVUIiwgQ09ORklHX1BIWV9BRERSLCAweDE1LCAmbW9kZV9jb250cm9sKTsKKwltaWlwaHlfd3JpdGUoIkZFQyBFVEhFUk5FVCIsIENPTkZJR19QSFlfQUREUiwgMHgxNSwKKwkJCW1vZGVfY29udHJvbCAmIDB4ZmZmZSk7CisJcmV0dXJuOworfQorCiAjaWZuZGVmIENGR19SQU1CT09UCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgU0RSQU0gY29udHJvbGxlci4KICAqLwotc3RhdGljIHZvaWQgc2RyYW1fc3RhcnQgKGludCBoaV9hZGRyKQorc3RhdGljIHZvaWQgc2RyYW1fc3RhcnQoaW50IGhpX2FkZHIpCiB7CiAJbG9uZyBoaV9hZGRyX2JpdCA9IGhpX2FkZHIgPyAweDAxMDAwMDAwIDogMDsKIApAQCAtMTExLDcgKzEzNCw3IEBACiAvKgogICogSW5pdGFsaXplIFNEUkFNIC0gY29uZmlndXJlIFNEUkFNIGNvbnRyb2xsZXIsIGRldGVjdCBtZW1vcnkgc2l6ZS4KICAqLwotbG9uZyBpbnQgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQorbG9uZyBpbnQgaW5pdGRyYW0oaW50IGJvYXJkX3R5cGUpCiB7CiAJdWxvbmcgZHJhbXNpemUgPSAwOwogI2lmbmRlZiBDRkdfUkFNQk9PVApAQCAtMTY1LDggKzE4OCw0MyBAQAogfQogCiAKLWludCBjaGVja2JvYXJkICh2b2lkKQoraW50IGNoZWNrYm9hcmQodm9pZCkKIHsKLQlwdXRzKCJCb2FyZDogUHJvbWVzcyBNb3Rpb24tUFJPIGJvYXJkXG4iKTsKKwl1Y2hhciByZXYgPSAqKHZ1X2NoYXIgKilDUExEX1JFVl9SRUdJU1RFUjsKKwlwcmludGYoIkJvYXJkOiBQcm9tZXNzIE1vdGlvbi1QUk8gYm9hcmQgKENQTEQgcmV2LiAweCUwMngpXG4iLCByZXYpOwogCXJldHVybiAwOwogfQorCisKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9GTEFUX1RSRUUpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQordm9pZCBmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKK3sKKwlmdF9jcHVfc2V0dXAoYmxvYiwgYmQpOworfQorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApICovCisKKworI2lmIGRlZmluZWQoQ09ORklHX1NUQVRVU19MRUQpCit2b2lkIF9fbGVkX2luaXQobGVkX2lkX3QgcmVnYWRkciwgaW50IHN0YXRlKQoreworCSooKHZ1X2xvbmcgKikgcmVnYWRkcikgfD0gRU5BQkxFX0dQSU9fT1VUOworCisJaWYgKHN0YXRlID09IFNUQVRVU19MRURfT04pCisJCSooKHZ1X2xvbmcgKikgcmVnYWRkcikgfD0gTEVEX09OOworCWVsc2UKKwkJKigodnVfbG9uZyAqKSByZWdhZGRyKSAmPSB+TEVEX09OOworfQorCit2b2lkIF9fbGVkX3NldChsZWRfaWRfdCByZWdhZGRyLCBpbnQgc3RhdGUpCit7CisJaWYgKHN0YXRlID09IFNUQVRVU19MRURfT04pCisJCSooKHZ1X2xvbmcgKikgcmVnYWRkcikgfD0gTEVEX09OOworCWVsc2UKKwkJKigodnVfbG9uZyAqKSByZWdhZGRyKSAmPSB+TEVEX09OOworfQorCit2b2lkIF9fbGVkX3RvZ2dsZShsZWRfaWRfdCByZWdhZGRyKQoreworCSooKHZ1X2xvbmcgKikgcmVnYWRkcikgXj0gTEVEX09OOworfQorI2VuZGlmIC8qIENPTkZJR19TVEFUVVNfTEVEICovCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4MzEzZXJkYi9NYWtlZmlsZSBiL2JvYXJkL21wYzgzMTNlcmRiL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ODdlNTEwCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjODMxM2VyZGIvTWFrZWZpbGUKQEAgLTAsMCArMSw1MCBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKKworQ09CSlMJOj0gJChCT0FSRCkubyBzZHJhbS5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzgzMTNlcmRiL2NvbmZpZy5tayBiL2JvYXJkL21wYzgzMTNlcmRiL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzY4MjY0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjODMxM2VyZGIvY29uZmlnLm1rCkBAIC0wLDAgKzEgQEAKK1RFWFRfQkFTRSA9IDB4RkUwMDAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzgzMTNlcmRiL21wYzgzMTNlcmRiLmMgYi9ib2FyZC9tcGM4MzEzZXJkYi9tcGM4MzEzZXJkYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OWZlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM4MzEzZXJkYi9tcGM4MzEzZXJkYi5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAyMDA2LTIwMDcKKyAqCisgKiBBdXRob3I6IFNjb3R0IFdvb2QgPHNjb3R0d29vZEBmcmVlc2NhbGUuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgZm9yIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxmdF9idWlsZC5oPgorI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPG1wYzgzeHguaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK2ludCBib2FyZF9lYXJseV9pbml0X2Yodm9pZCkKK3sKKyNpZm5kZWYgQ0ZHXzgzMTNFUkRCX0JST0tFTl9QTUMKKwl2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisKKwlpZiAoaW0tPnBtYy5wbWNjcjEgJiBQTUNDUjFfUE9XRVJfT0ZGKQorCQlnZC0+ZmxhZ3MgfD0gR0RfRkxHX1NJTEVOVDsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK2ludCBjaGVja2JvYXJkKHZvaWQpCit7CisJcHV0cygiQm9hcmQ6IEZyZWVzY2FsZSBNUEM4MzEzRVJEQlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX3JlZ2lvbiBwY2lfcmVnaW9uc1tdID0geworCXsKKwkJYnVzX3N0YXJ0OiBDRkdfUENJMV9NRU1fQkFTRSwKKwkJcGh5c19zdGFydDogQ0ZHX1BDSTFfTUVNX1BIWVMsCisJCXNpemU6IENGR19QQ0kxX01FTV9TSVpFLAorCQlmbGFnczogUENJX1JFR0lPTl9NRU0gfCBQQ0lfUkVHSU9OX1BSRUZFVENICisJfSwKKwl7CisJCWJ1c19zdGFydDogQ0ZHX1BDSTFfTU1JT19CQVNFLAorCQlwaHlzX3N0YXJ0OiBDRkdfUENJMV9NTUlPX1BIWVMsCisJCXNpemU6IENGR19QQ0kxX01NSU9fU0laRSwKKwkJZmxhZ3M6IFBDSV9SRUdJT05fTUVNCisJfSwKKwl7CisJCWJ1c19zdGFydDogQ0ZHX1BDSTFfSU9fQkFTRSwKKwkJcGh5c19zdGFydDogQ0ZHX1BDSTFfSU9fUEhZUywKKwkJc2l6ZTogQ0ZHX1BDSTFfSU9fU0laRSwKKwkJZmxhZ3M6IFBDSV9SRUdJT05fSU8KKwl9Cit9OworCit2b2lkIHBjaV9pbml0X2JvYXJkKHZvaWQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9ICh2b2xhdGlsZSBpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2xrODN4eF90ICpjbGsgPSAodm9sYXRpbGUgY2xrODN4eF90ICopJmltbXItPmNsazsKKwl2b2xhdGlsZSBsYXc4M3h4X3QgKnBjaV9sYXcgPSBpbW1yLT5zeXNjb25mLnBjaWxhdzsKKwlzdHJ1Y3QgcGNpX3JlZ2lvbiAqcmVnW10gPSB7IHBjaV9yZWdpb25zIH07CisJaW50IHdhcm1ib290OworCisJLyogRW5hYmxlIGFsbCAzIFBDSV9DTEtfT1VUUFVUcy4gKi8KKwljbGstPm9jY3IgfD0gMHhlMDAwMDAwMDsKKworCS8qCisJICogQ29uZmlndXJlIFBDSSBMb2NhbCBBY2Nlc3MgV2luZG93cworCSAqLworCXBjaV9sYXdbMF0uYmFyID0gQ0ZHX1BDSTFfTUVNX1BIWVMgJiBMQVdCQVJfQkFSOworCXBjaV9sYXdbMF0uYXIgPSBMQkxBV0FSX0VOIHwgTEJMQVdBUl81MTJNQjsKKworCXBjaV9sYXdbMV0uYmFyID0gQ0ZHX1BDSTFfSU9fUEhZUyAmIExBV0JBUl9CQVI7CisJcGNpX2xhd1sxXS5hciA9IExCTEFXQVJfRU4gfCBMQkxBV0FSXzFNQjsKKworCXdhcm1ib290ID0gZ2QtPmJkLT5iaV9ib290ZmxhZ3MgJiBCT09URkxBR19XQVJNOworI2lmbmRlZiBDRkdfODMxM0VSREJfQlJPS0VOX1BNQworCXdhcm1ib290IHw9IGltbXItPnBtYy5wbWNjcjEgJiBQTUNDUjFfUE9XRVJfT0ZGOworI2VuZGlmCisKKwltcGM4M3h4X3BjaV9pbml0KDEsIHJlZywgd2FybWJvb3QpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkKK3ZvaWQgZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCit7CisJdTMyICpwOworCWludCBsZW47CisKKyNpZmRlZiBDT05GSUdfUENJCisJZnRfcGNpX3NldHVwKGJsb2IsIGJkKTsKKyNlbmRpZgorCWZ0X2NwdV9zZXR1cChibG9iLCBiZCk7CisKKwlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi9tZW1vcnkvcmVnIiwgJmxlbik7CisJaWYgKHApIHsKKwkJKnArKyA9IGNwdV90b19iZTMyKGJkLT5iaV9tZW1zdGFydCk7CisJCSpwID0gY3B1X3RvX2JlMzIoYmQtPmJpX21lbXNpemUpOworCX0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODMxM2VyZGIvc2RyYW0uYyBiL2JvYXJkL21wYzgzMTNlcmRiL3NkcmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI2Nzc4OAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzgzMTNlcmRiL3NkcmFtLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIDIwMDYtMjAwNworICoKKyAqIEF1dGhvcnM6IE5pY2suU3BlbmNlQGZyZWVzY2FsZS5jb20KKyAqICAgICAgICAgIFdpbHNvbi5Mb0BmcmVlc2NhbGUuY29tCisgKiAgICAgICAgICBzY290dHdvb2RAZnJlZXNjYWxlLmNvbQorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgZm9yIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtcGM4M3h4Lmg+CisjaW5jbHVkZSA8c3BkX3NkcmFtLmg+CisKKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNpZm5kZWYgQ0ZHXzgzMTNFUkRCX0JST0tFTl9QTUMKK3N0YXRpYyB2b2lkIHJlc3VtZV9mcm9tX3NsZWVwKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisJdTMyIG1hZ2ljID0gKih1MzIgKikwOworCisJdHlwZWRlZiB2b2lkICgqZnVuY190KSh2b2lkKTsKKwlmdW5jX3QgcmVzdW1lID0gKihmdW5jX3QgKik0OworCisJaWYgKG1hZ2ljID09IDB4ZjUxNTNhZTUpCisJCXJlc3VtZSgpOworCisJZ2QtPmZsYWdzICY9IH5HRF9GTEdfU0lMRU5UOworCXB1dHMoIlxuUmVzdW1lIGZyb20gc2xlZXAgZmFpbGVkOiBiYWQgbWFnaWMgd29yZFxuIik7Cit9CisjZW5kaWYKKworLyogRml4ZWQgc2RyYW0gaW5pdCAtLSBkb2Vzbid0IHVzZSBzZXJpYWwgcHJlc2VuY2UgZGV0ZWN0LgorICoKKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBmYXN0ZXIgYm9vdGluZyBpbiBjb25maWdzIHdoZXJlIHRoZSBSQU0gaXMgdW5saWtlbHkKKyAqIHRvIGJlIGNoYW5nZWQsIG9yIGZvciB0aGluZ3MgbGlrZSBOQU5EIGJvb3Rpbmcgd2hlcmUgc3BhY2UgaXMgdGlnaHQuCisgKi8KK3N0YXRpYyBsb25nIGZpeGVkX3NkcmFtKHZvaWQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAodm9sYXRpbGUgaW1tYXBfdCAqKUNGR19JTU1SOworCXUzMiBtc2l6ZSA9IENGR19ERFJfU0laRSAqIDEwMjQgKiAxMDI0OworCXUzMiBtc2l6ZV9sb2cyID0gX19pbG9nMihtc2l6ZSk7CisKKwlpbS0+c3lzY29uZi5kZHJsYXdbMF0uYmFyID0gQ0ZHX0REUl9TRFJBTV9CQVNFID4+IDEyOworCWltLT5zeXNjb25mLmRkcmxhd1swXS5hciA9IExCTEFXQVJfRU4gfCAobXNpemVfbG9nMiAtIDEpOworCWltLT5zeXNjb25mLmRkcmNkciA9IENGR19ERFJDRFJfVkFMVUU7CisKKwkvKgorCSAqIEVycmF0dW0gRERSMyByZXF1aXJlcyBhIDUwbXMgZGVsYXkgYWZ0ZXIgY2xlYXJpbmcgRERSQ0RSW0REUl9jZmddLAorCSAqIG9yIHRoZSBERFIyIGNvbnRyb2xsZXIgbWF5IGZhaWwgdG8gaW5pdGlhbGl6ZSBjb3JyZWN0bHkuCisJICovCisJdWRlbGF5KDUwMDAwKTsKKworCWltLT5kZHIuY3NibmRzWzBdLmNzYm5kcyA9IChtc2l6ZSAtIDEpID4+IDI0OworCWltLT5kZHIuY3NfY29uZmlnWzBdID0gQ0ZHX0REUl9DT05GSUc7CisKKwkvKiBDdXJyZW50bHkgd2UgdXNlIG9ubHkgb25lIENTLCBzbyBkaXNhYmxlIHRoZSBvdGhlciBiYW5rLiAqLworCWltLT5kZHIuY3NfY29uZmlnWzFdID0gMDsKKworCWltLT5kZHIuc2RyYW1fY2xrX2NudGwgPSBDRkdfRERSX0NMS19DTlRMOworCWltLT5kZHIudGltaW5nX2NmZ18zID0gQ0ZHX0REUl9USU1JTkdfMzsKKwlpbS0+ZGRyLnRpbWluZ19jZmdfMSA9IENGR19ERFJfVElNSU5HXzE7CisJaW0tPmRkci50aW1pbmdfY2ZnXzIgPSBDRkdfRERSX1RJTUlOR18yOworCWltLT5kZHIudGltaW5nX2NmZ18wID0gQ0ZHX0REUl9USU1JTkdfMDsKKworI2lmbmRlZiBDRkdfODMxM0VSREJfQlJPS0VOX1BNQworCWlmIChpbS0+cG1jLnBtY2NyMSAmIFBNQ0NSMV9QT1dFUl9PRkYpCisJCWltLT5kZHIuc2RyYW1fY2ZnID0gQ0ZHX1NEUkFNX0NGRyB8IFNEUkFNX0NGR19CSTsKKwllbHNlCisjZW5kaWYKKwkJaW0tPmRkci5zZHJhbV9jZmcgPSBDRkdfU0RSQU1fQ0ZHOworCisJaW0tPmRkci5zZHJhbV9jZmcyID0gQ0ZHX1NEUkFNX0NGRzI7CisJaW0tPmRkci5zZHJhbV9tb2RlID0gQ0ZHX0REUl9NT0RFOworCWltLT5kZHIuc2RyYW1fbW9kZTIgPSBDRkdfRERSX01PREVfMjsKKworCWltLT5kZHIuc2RyYW1faW50ZXJ2YWwgPSBDRkdfRERSX0lOVEVSVkFMOworCXN5bmMoKTsKKworCS8qIGVuYWJsZSBERFIgY29udHJvbGxlciAqLworCWltLT5kZHIuc2RyYW1fY2ZnIHw9IFNEUkFNX0NGR19NRU1fRU47CisKKwlyZXR1cm4gbXNpemU7Cit9CisKK2xvbmcgaW50IGluaXRkcmFtKGludCBib2FyZF90eXBlKQoreworCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKHZvbGF0aWxlIGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBsYnVzODN4eF90ICpsYmMgPSAmaW0tPmxidXM7CisJdTMyIG1zaXplOworCisJaWYgKChpbS0+c3lzY29uZi5pbW1yYmFyICYgSU1NUkJBUl9CQVNFX0FERFIpICE9ICh1MzIpaW0pCisJCXJldHVybiAtMTsKKworCXB1dHMoIkluaXRpYWxpemluZ1xuIik7CisKKwkvKiBERFIgU0RSQU0gLSBNYWluIFNPRElNTSAqLworCW1zaXplID0gZml4ZWRfc2RyYW0oKTsKKworCS8qIExvY2FsIEJ1cyBzZXR1cCBsYmNyIGFuZCBtcnRwciAqLworCWxiYy0+bGJjciA9IENGR19MQkNfTEJDUjsKKwlsYmMtPm1ydHByID0gQ0ZHX0xCQ19NUlRQUjsKKwlzeW5jKCk7CisKKyNpZm5kZWYgQ0ZHXzgzMTNFUkRCX0JST0tFTl9QTUMKKwlpZiAoaW0tPnBtYy5wbWNjcjEgJiBQTUNDUjFfUE9XRVJfT0ZGKQorCQlyZXN1bWVfZnJvbV9zbGVlcCgpOworI2VuZGlmCisKKwlwdXRzKCIgICBERFIgUkFNOiAiKTsKKwkvKiByZXR1cm4gdG90YWwgYnVzIFNEUkFNIHNpemUoYnl0ZXMpICAtLSBERFIgKi8KKwlyZXR1cm4gbXNpemU7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4MzEzZXJkYi91LWJvb3QubGRzIGIvYm9hcmQvbXBjODMxM2VyZGIvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzdjODdhCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjODMxM2VyZGIvdS1ib290LmxkcwpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KKyAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9CisgIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9CisgIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9CisgIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KKyAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkgCX0KKyAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQorICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKSAJfQorICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkgCX0KKyAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKSAJfQorICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KKyAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQorICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9CisgIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9CisgIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KKyAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KKyAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9CisgIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KKyAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9CisgIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KKyAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KKyAgLnBsdCA6IHsgKigucGx0KSB9CisgIC50ZXh0ICAgICAgOgorICB7CisgICAgY3B1L21wYzgzeHgvc3RhcnQubwkoLnRleHQpCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICAgIC4gPSBBTElHTigxNik7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgICAqKC5laF9mcmFtZSkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDBGRkYpICYgMHhGRkZGRjAwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMjsKKyAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKSA+PiAyOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIC4gPSAuOworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCisgIC4gPSAuOworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCisgIC4gPSBBTElHTig0MDk2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oNDA5Nik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcyAgICAgICA6CisgIHsKKyAgICooLnNic3MpICooLnNjb21tb24pCisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgfQorICBfZW5kID0gLiA7CisgIFBST1ZJREUgKGVuZCA9IC4pOworfQorRU5UUlkoX3N0YXJ0KQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODM0OWl0eC9tcGM4MzQ5aXR4LmMgYi9ib2FyZC9tcGM4MzQ5aXR4L21wYzgzNDlpdHguYwppbmRleCAyYjNkZWQxLi4xNzhiMWQzIDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4MzQ5aXR4L21wYzgzNDlpdHguYworKysgYi9ib2FyZC9tcGM4MzQ5aXR4L21wYzgzNDlpdHguYwpAQCAtODAsOCArODAsNyBAQAogCWltLT5kZHIuc2RyYW1faW50ZXJ2YWwgPQogCSAgICAoMHgwNDEwIDw8IFNEUkFNX0lOVEVSVkFMX1JFRklOVF9TSElGVCkgfCAoMHgwMTAwIDw8CiAJCQkJCQkgICAgICAgU0RSQU1fSU5URVJWQUxfQlNUT1BSRV9TSElGVCk7Ci0JaW0tPmRkci5zZHJhbV9jbGtfY250bCA9Ci0JICAgIEREUl9TRFJBTV9DTEtfQ05UTF9TU19FTiB8IEREUl9TRFJBTV9DTEtfQ05UTF9DTEtfQURKVVNUXzA1OworCWltLT5kZHIuc2RyYW1fY2xrX2NudGwgPSBDRkdfRERSX1NEUkFNX0NMS19DTlRMOwogCiAJdWRlbGF5KDIwMCk7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzgzNjBlbWRzL2NvbmZpZy5tayBiL2JvYXJkL21wYzgzNjBlbWRzL2NvbmZpZy5tawppbmRleCA1ODAxYTVmLi45YWNlODg2IDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4MzYwZW1kcy9jb25maWcubWsKKysrIGIvYm9hcmQvbXBjODM2MGVtZHMvY29uZmlnLm1rCkBAIC0yNiw4ICsyNiwzIEBACiAjCiAKIFRFWFRfQkFTRSA9IDB4RkUwMDAwMDAKLQotIwotIyBBZGRpdGlvbmFsIGJvYXJkLXNwZWNpZmljIGxpYnJhcmllcwotIwotQk9BUkRMSUJTID0gbGliZmR0L2xpYmZkdC5hCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTQwYWRzL2luaXQuUyBiL2JvYXJkL21wYzg1NDBhZHMvaW5pdC5TCmluZGV4IDI0MmNiOWYuLjU0NGZkZTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wYzg1NDBhZHMvaW5pdC5TCisrKyBiL2JvYXJkL21wYzg1NDBhZHMvaW5pdC5TCkBAIC0yNjAsOCArMjYwLDggQEAKICNkZWZpbmUgTEFXQkFSMiAoKENGR19MQkNfU0RSQU1fQkFTRT4+MTIpICYgMHhmZmZmZikKICNkZWZpbmUgTEFXQVIyCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfTEJDIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzI1Nk0pKQogCi0jZGVmaW5lIExBV0JBUjMgKChDRkdfUENJMV9JT19CQVNFPj4xMikgJiAweGZmZmZmKQotI2RlZmluZSBMQVdBUjMJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0lYIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzE2TSkpCisjZGVmaW5lIExBV0JBUjMgKChDRkdfUENJMV9JT19QSFlTPj4xMikgJiAweGZmZmZmKQorI2RlZmluZSBMQVdBUjMJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0lYIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzFNKSkKIAogLyoKICAqIFJhcGlkIElPIGF0IDB4YzAwMF8wMDAwIGZvciA1MTIgTQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU2MGFkcy9pbml0LlMgYi9ib2FyZC9tcGM4NTYwYWRzL2luaXQuUwppbmRleCAyNDJjYjlmLi41NDRmZGU5IDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4NTYwYWRzL2luaXQuUworKysgYi9ib2FyZC9tcGM4NTYwYWRzL2luaXQuUwpAQCAtMjYwLDggKzI2MCw4IEBACiAjZGVmaW5lIExBV0JBUjIgKChDRkdfTEJDX1NEUkFNX0JBU0U+PjEyKSAmIDB4ZmZmZmYpCiAjZGVmaW5lIExBV0FSMgkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX0xCQyB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8yNTZNKSkKIAotI2RlZmluZSBMQVdCQVIzICgoQ0ZHX1BDSTFfSU9fQkFTRT4+MTIpICYgMHhmZmZmZikKLSNkZWZpbmUgTEFXQVIzCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJWCB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xNk0pKQorI2RlZmluZSBMQVdCQVIzICgoQ0ZHX1BDSTFfSU9fUEhZUz4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVIzCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJWCB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xTSkpCiAKIC8qCiAgKiBSYXBpZCBJTyBhdCAweGMwMDBfMDAwMCBmb3IgNTEyIE0KZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NjhtZHMvTWFrZWZpbGUgYi9ib2FyZC9tcGM4NTY4bWRzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OTlhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM4NTY4bWRzL01ha2VmaWxlCkBAIC0wLDAgKzEsNTggQEAKKyMKKyMgQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgorCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCisKK0NPQkpTCTo9ICQoQk9BUkQpLm8gXAorCWJjc3IubyBcCisJZnRfYm9hcmQubworCitTT0JKUwk6PSBpbml0Lm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoT0JKUykgJChTT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NjhtZHMvYmNzci5jIGIvYm9hcmQvbXBjODU2OG1kcy9iY3NyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUyZThjZAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg1NjhtZHMvYmNzci5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSAiYmNzci5oIgorCit2b2lkIGVuYWJsZV84NTY4bWRzX2R1YXJ0KCkKK3sKKwl2b2xhdGlsZSB1aW50KiBkdWFydF9tdXgJPSAodWludCAqKShDRkdfQ0NTUkJBUiArIDB4ZTAwNjApOworCXZvbGF0aWxlIHVpbnQqIGRldmljZXMJCT0gKHVpbnQgKikoQ0ZHX0NDU1JCQVIgKyAweGUwMDcwKTsKKwl2b2xhdGlsZSB1OCAqYmNzcgkJPSAodTggKikoQ0ZHX0JDU1IpOworCisJKmR1YXJ0X211eCA9IDB4ODAwMDAwMDA7CS8qIFNldCB0aGUgbXV4IHRvIER1YXJ0IG9uIFBNVVhDUiAqLworCSpkZXZpY2VzICA9IDA7CQkJLyogRW5hYmxlIGFsbCBwZXJpcGhlcmFsIGRldmljZXMgKi8KKwliY3NyWzVdIHw9IDB4MDE7CQkvKiBFbmFibGUgRHVhcnQgaW4gQkNTUiovCit9CisKK3ZvaWQgZW5hYmxlXzg1NjhtZHNfZmxhc2hfd3JpdGUoKQoreworCXZvbGF0aWxlIHU4ICpiY3NyID0gKHU4ICopKENGR19CQ1NSKTsKKworCWJjc3JbOV0gfD0gMHgwMTsKK30KKwordm9pZCBkaXNhYmxlXzg1NjhtZHNfZmxhc2hfd3JpdGUoKQoreworCXZvbGF0aWxlIHU4ICpiY3NyID0gKHU4ICopKENGR19CQ1NSKTsKKworCWJjc3JbOV0gJj0gfigweDAxKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NjhtZHMvYmNzci5oIGIvYm9hcmQvbXBjODU2OG1kcy9iY3NyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0Y2IyZgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg1NjhtZHMvYmNzci5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQkNTUl9IXworI2RlZmluZSBfX0JDU1JfSF8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorCisvKiBCQ1NSIEJpdCBkZWZpbml0aW9ucworCSogQkNTUiAwICoKKwkwOjMJY2NiIHN5cyBwbGwKKwk0OjYJY2ZnIGNvcmUgcGxsCisJNwljZmcgYm9vdCBzZXEKKworCSogQkNTUiAxICoKKwkwOjIgCWNmZyByb20gbG9jaworCTM6NSAJY2ZnIGhvc3QgYWdlbnQKKwk2CVBDSSBJTworCTcJY2ZnIFJJTyBzaXplCisKKwkqIEJDU1IgMiAqCisJMDo0CVFFIFBMTAorCTUJUUUgY2xvY2sKKwk2CWNmZyBQQ0kgYXJiaXRlcgorCisJKiBCQ1NSIDMgKgorCTAJVFNFQzEgcmVkdWNlCisJMQlUU0VDMiByZWR1Y2UKKwkyOjMJVFNFQzEgcHJvdG9jb2wKKwk0OjUgCVRTRUMyIHByb3RvY29sCisJNglQSFkxIHNsYXZlCisJNwlQSFkyIHNsYXZlCisKKwkqIEJDU1IgNCAqCisJNAljbG9jayBlbmFibGUKKwk1CWJvb3QgRVBST00KKwk2CUdFVEggdHJhbnNhY3RpdmUgcmVzZXQKKwk3CUJSRCB3cml0ZSBwb3RlY3QKKworCSogQkNTUiA1ICoKKwkxOjMJTGVkcyAxLTMKKwk0CVVQQzEgZW5hYmxlCisJNQlVUEMyIGVuYWJsZQorCTYJVVBDMiBwb3MKKwk3CVJTMjMyIGVuYWJsZQorCisJKiBCQ1NSIDYgKgorCTAJQ0ZHIHZlciAwCisJMQlDRkcgdmVyIDEKKwk2CVJlZ2lzdGVyIGNvbmZpZyBsZWQKKwk3CVBvd2VyIG9uIHJlc2V0CisKKwkqIEJDU1IgNyAqCisJMiAJYm9hcmQgaG9zdCBtb2RlIGluZGljYXRpb24KKwk1IAllbmFibGUgVFNFQzEgUEhZCisJNiAJZW5hYmxlIFRTRUMyIFBIWQorCisJKiBCQ1NSIDggKgorCTAJVUNDIEdFVEgxIGVuYWJsZQorCTEJVUNDIEdNSUkgZW5hYmxlCisJMwlVQ0MgVEJJIGVuYWJsZQorCTUJVUNDIE1JSSBlbmFibGUKKwk3CVJlYWwgdGltZSBjbG9jayByZXNldAorCisJKiBCQ1NSIDkgKgorCTAJVUNDMiBHRVRIIGVuYWJsZQorCTEJVUNDMiBHTUlJIGVuYWJsZQorCTMJVUNDMiBUQkkgZW5hYmxlCisJNQlVQ0MyIE1JSSBlbmFibGUKKwk2CVJlYWR5IG9ubHkgLSBpbmRpY2F0ZSBmbGFzaCByZWFkeSBhZnRlciBidXJuaW5nCisJNwlGbGFzaCB3cml0ZSBwcm90ZWN0CisqLworCisvKkJDU1IgVXRpbHMgZnVuY3Rpb25zKi8KKwordm9pZCBlbmFibGVfODU2OG1kc19kdWFydCh2b2lkKTsKK3ZvaWQgZW5hYmxlXzg1NjhtZHNfZmxhc2hfd3JpdGUodm9pZCk7Cit2b2lkIGRpc2FibGVfODU2OG1kc19mbGFzaF93cml0ZSh2b2lkKTsKKworI2VuZGlmCS8qIF9fQkNTUl9IXyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU2OG1kcy9jb25maWcubWsgYi9ib2FyZC9tcGM4NTY4bWRzL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjE1MjJjCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjODU2OG1kcy9jb25maWcubWsKQEAgLTAsMCArMSwzMCBAQAorIworIyBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIworIyBtcGM4NTY4bWRzIGJvYXJkCisjCitURVhUX0JBU0UgPSAweGZmZjgwMDAwCisKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX0U1MDA9MQorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfTVBDODV4eD0xCitQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19NUEM4NTY4PTEKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NjhtZHMvZnRfYm9hcmQuYyBiL2JvYXJkL21wYzg1NjhtZHMvZnRfYm9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjgxNWNjCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjODU2OG1kcy9mdF9ib2FyZC5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2luY2x1ZGUgPGZ0X2J1aWxkLmg+CisKK2V4dGVybiB2b2lkIGZ0X2NwdV9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9GTEFUX1RSRUUpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQordm9pZAorZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCit7CisJdTMyICpwOworCWludCBsZW47CisjaWZkZWYgQ09ORklHX1BDSQorCWZ0X3BjaV9zZXR1cChibG9iLCBiZCk7CisjZW5kaWYKKwlmdF9jcHVfc2V0dXAoYmxvYiwgYmQpOworCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiL21lbW9yeS9yZWciLCAmbGVuKTsKKwlpZiAocCAhPSBOVUxMKSB7CisJCSpwKysgPSBjcHVfdG9fYmUzMihiZC0+YmlfbWVtc3RhcnQpOworCQkqcCA9IGNwdV90b19iZTMyKGJkLT5iaV9tZW1zaXplKTsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX09GX0ZMQVRfVFJFRSAmJiBDT05GSUdfT0ZfQk9BUkRfU0VUVVAgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NjhtZHMvaW5pdC5TIGIvYm9hcmQvbXBjODU2OG1kcy9pbml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4Nzk4MgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg1NjhtZHMvaW5pdC5TCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyAqIENvcHlyaWdodCAyMDAyLDIwMDMsIE1vdG9yb2xhIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8cHBjX2FzbS50bXBsPgorI2luY2x1ZGUgPHBwY19kZWZzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPG1wYzg1eHguaD4KKworCisvKgorICogVExCMCBhbmQgVExCMSBFbnRyaWVzCisgKgorICogT3V0IG9mIHJlc2V0LCBUTEIxJ3MgRW50cnkgMCBtYXBzIHRoZSBoaWdoZXN0IDRLIGZvciBDQ1NSQkFSLgorICogSG93ZXZlciwgQ0NTUkJBUiBpcyB0aGVuIHJlbG9jYXRlZCB0byBDRkdfQ0NTUkJBUiByaWdodCBhZnRlcgorICogdGhlc2UgVExCIGVudHJpZXMgYXJlIGVzdGFibGlzaGVkLgorICoKKyAqIFRoZSBUTEIgZW50cmllcyBmb3IgRERSIGFyZSBkeW5hbWljYWxseSBzZXR1cCBpbiBzcGRfc2RyYW0oKQorICogYW5kIHVzZSBUTEIxIEVudHJpZXMgOCB0aHJvdWdoIDE1IGFzIG5lZWRlZCBhY2NvcmRpbmcgdG8gdGhlCisgKiBzaXplIG9mIEREUiBtZW1vcnkuCisgKgorICogTUFTMDogdGxic2VsLCBlc2VsLCBudgorICogTUFTMTogdmFsaWQsIGlwcm90LCB0aWQsIHRzLCB0c2l6ZQorICogTUFTMjogZXBuLCBzaGFyZW4sIHgwLCB4MSwgdywgaSwgbSwgZywgZQorICogTUFTMzogcnBuLCB1MC11MywgdXgsIHN4LCB1dywgc3csIHVyLCBzcgorICovCisjZGVmaW5lCWVudHJ5X3N0YXJ0IFwKKwltZmxyCXIxCTsJXAorCWJsCTBmCTsKKworI2RlZmluZQllbnRyeV9lbmQgXAorMDoJbWZscglyMAk7CVwKKwltdGxyCXIxCTsJXAorCWJscgkJOworCisKKwkuc2VjdGlvbgkuYm9vdHBnLCAiYXgiCisJLmdsb2JsCXRsYjFfZW50cnkKK3RsYjFfZW50cnk6CisJZW50cnlfc3RhcnQKKworCS8qCisJICogTnVtYmVyIG9mIFRMQjAgYW5kIFRMQjEgZW50cmllcyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlCisJICovCisJLmxvbmcgKDJmLTFmKS8xNgorCisxOgorI2lmIChDRkdfQ0NTUkJBUl9ERUZBVUxUICE9IENGR19DQ1NSQkFSKQorCS8qCisJICogVExCMAkJNEsJTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqIDB4ZmY3MDAwMDAJNEsJSW5pdGlhbCBDQ1NSQkFSIG1hcHBpbmcKKwkgKgorCSAqIFRoaXMgZW5kcyB1cCBhdCBhIFRMQjAgSW5kZXg9PTAgZW50cnksIGFuZCBtdXN0IG5vdCBjb2xsaWRlCisJICogd2l0aCBvdGhlciBUTEIwIEVudHJpZXMuCisJICovCisJLmxvbmcgVExCMV9NQVMwKDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDAsIDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfQ0NTUkJBUl9ERUZBVUxUKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0NDU1JCQVJfREVGQVVMVCksIDAsMCwwLDAsMCwxLDAsMSwwLDEpCisjZWxzZQorI2Vycm9yKCJVcGRhdGUgdGhlIG51bWJlciBvZiB0YWJsZSBlbnRyaWVzIGluIHRsYjFfZW50cnkiKQorI2VuZGlmCisKKwkvKgorCSAqIFRMQjAJCTE2SwlDYWNoZWFibGUsIG5vbi1ndWFyZGVkCisJICogMHhkMDAxXzAwMDAJMTZLCVRlbXBvcmFyeSBHbG9iYWwgZGF0YSBmb3IgaW5pdGlhbGl6YXRpb24KKwkgKgorCSAqIFVzZSBmb3VyIDRLIFRMQjAgZW50cmllcy4gIFRoZXNlIGVudHJpZXMgbXVzdCBiZSBjYWNoZWFibGUKKwkgKiBhcyB0aGV5IHByb3ZpZGUgdGhlIGJvb3RzdHJhcCBtZW1vcnkgYmVmb3JlIHRoZSBtZW1vcnkKKwkgKiBjb250cm9sZXIgYW5kIHJlYWwgbWVtb3J5IGhhdmUgYmVlbiBjb25maWd1cmVkLgorCSAqCisJICogVGhlc2UgZW50cmllcyBlbmQgdXAgYXQgVExCMCBJbmRpY2llcyAweDEwLCAweDE0LCAweDE4IGFuZCAweDFjLAorCSAqIGFuZCBtdXN0IG5vdCBjb2xsaWRlIHdpdGggb3RoZXIgVExCMCBlbnRyaWVzLgorCSAqLworCisJLmxvbmcgVExCMV9NQVMwKDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDAsIDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfSU5JVF9SQU1fQUREUiksIDAsMCwwLDAsMCwwLDAsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19JTklUX1JBTV9BRERSKSwgMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS5sb25nIFRMQjFfTUFTMCgwLCAwLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAwLCAwLCAwLCAwKQorCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX0lOSVRfUkFNX0FERFIgKyA0ICogMTAyNCksCisJCQkwLDAsMCwwLDAsMCwwLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfSU5JVF9SQU1fQUREUiArIDQgKiAxMDI0KSwKKwkJCTAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKwkubG9uZyBUTEIxX01BUzAoMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMCwgMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19JTklUX1JBTV9BRERSICsgOCAqIDEwMjQpLAorCQkJMCwwLDAsMCwwLDAsMCwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9FUE4oQ0ZHX0lOSVRfUkFNX0FERFIgKyA4ICogMTAyNCksCisJCQkwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLmxvbmcgVExCMV9NQVMwKDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDAsIDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfSU5JVF9SQU1fQUREUiArIDEyICogMTAyNCksCisJCQkwLDAsMCwwLDAsMCwwLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfSU5JVF9SQU1fQUREUiArIDEyICogMTAyNCksCisJCQkwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyogVExCIDEgSW5pdGlhbGl6YXRpb25zICovCisJLyoKKwkgKiBUTEJlIDA6CTE2TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHhmZjAwMDAwMAkxNk0JRkxBU0ggKHVwcGVyIGhhbGYpCisJICogT3V0IG9mIHJlc2V0IHRoaXMgZW50cnkgaXMgb25seSA0Sy4KKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzE2TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19GTEFTSF9CQVNFICsgMHgxMDAwMDAwKSwKKwkJCTAsMCwwLDAsMSwwLDEsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19GTEFTSF9CQVNFICsgMHgxMDAwMDAwKSwKKwkJCTAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKwkvKgorCSAqIFRMQmUgMToJMTZNCU5vbi1jYWNoZWFibGUsIGd1YXJkZWQKKwkgKiAweGZlMDAwMDAwCTE2TQlGTEFTSCAobG93ZXIgaGFsZikKKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgMSwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzE2TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19GTEFTSF9CQVNFKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0ZMQVNIX0JBU0UpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEJlIDI6CTI1Nk0JTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqIDB4ODAwMDAwMDAJMjU2TQlQQ0kxIE1FTQorCSAqLworCS5sb25nIFRMQjFfTUFTMCgxLCAyLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfMjU2TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19QQ0kxX01FTV9CQVNFKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX1BDSTFfTUVNX0JBU0UpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEJlIDM6CTI1Nk0JTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqIDB4YTAwMDAwMDAJMjU2TQlQQ0llIE1lbQorCSAqLworCS5sb25nIFRMQjFfTUFTMCgxLCAzLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfMjU2TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19QRVhfTUVNX0JBU0UpLCAwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfUEVYX01FTV9CQVNFKSwgMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS8qCisJICogVExCZSA0OglSZXNlcnZlZCBmb3IgZnV0dXJlIHVzYWdlCisJICovCisKKwkvKgorCSAqIFRMQmUgNToJNjRNCU5vbi1jYWNoZWFibGUsIGd1YXJkZWQKKwkgKiAweGUwMDBfMDAwMAkxTQlDQ1NSQkFSCisJICogMHhlMjAwXzAwMDAJOE0JUENJMSBJTworCSAqIDB4ZTI4MF8wMDAwCThNCVBDSWUgSU8KKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgNSwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzY0TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19DQ1NSQkFSKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0NDU1JCQVIpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEJlIDY6CTY0TQlDYWNoZWFibGUsIG5vbi1ndWFyZGVkCisJICogMHhmMDAwXzAwMDAJNjRNCUxCQyBTRFJBTQorCSAqLworCS5sb25nIFRMQjFfTUFTMCgxLCA2LCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfNjRNKQorCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX0xCQ19TRFJBTV9CQVNFKSwgMCwwLDAsMCwwLDAsMCwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0xCQ19TRFJBTV9CQVNFKSwgMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS8qCisJICogVExCZSA3OgkyNTZLCU5vbi1jYWNoZWFibGUsIGd1YXJkZWQKKwkgKiAweGY4MDAwMDAwCTMySyBCQ1NSCisJICogMHhmODAwODAwMAkzMksgUElCIChDUzQpCisJICogMHhmODAxMDAwMAkzMksgUElCIChDUzUpCisJICovCisJLmxvbmcgVExCMV9NQVMwKDEsIDcsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDEsIDAsIDAsIEJPT0tFX1BBR0VTWl8yNTZLKQorCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX0JDU1JfQkFTRSksIDAsMCwwLDAsMSwwLDEsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19CQ1NSX0JBU0UpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisyOgorCWVudHJ5X2VuZAorCisvKgorICogTEFXKExvY2FsIEFjY2VzcyBXaW5kb3cpIGNvbmZpZ3VyYXRpb246CisgKgorICowKSAgIDB4MDAwMF8wMDAwICAgMHg3ZmZmX2ZmZmYgICAgIEREUiAgICAgICAgICAgICAgICAgICAgIDJHCisgKjEpICAgMHg4MDAwXzAwMDAgICAweDlmZmZfZmZmZiAgICAgUENJMSBNRU0gICAgICAgICAgICAgICAgMjU2TUIKKyAqMikgICAweGEwMDBfMDAwMCAgIDB4YmZmZl9mZmZmICAgICBQQ0llIE1FTSAgICAgICAgICAgICAgICAyNTZNQgorICo1KSAgIDB4YzAwMF8wMDAwICAgMHhkZmZmX2ZmZmYgICAgIFNSSU8gICAgICAgICAgICAgICAgICAgIDI1Nk1CCisgKi0pICAgMHhlMDAwXzAwMDAgICAweGUwMGZfZmZmZiAgICAgQ0NTUiAgICAgICAgICAgICAgICAgICAgMU0KKyAqMykgICAweGUyMDBfMDAwMCAgIDB4ZTI3Zl9mZmZmICAgICBQQ0kxIEkvTyAgICAgICAgICAgICAgICA4TQorICo0KSAgIDB4ZTI4MF8wMDAwICAgMHhlMmZmX2ZmZmYgICAgIFBDSWUgSS8wICAgICAgICAgICAgICAgIDhNCisgKjYuYSkgMHhmMDAwXzAwMDAgICAweGYzZmZfZmZmZiAgICAgU0RSQU0gICAgICAgICAgICAgICAgICAgNjRNQgorICo2LmIpIDB4ZjgwMF8wMDAwICAgMHhmODAwXzdmZmYgICAgIEJDU1IgICAgICAgICAgICAgICAgICAgIDMyS0IKKyAqNi5jKSAweGY4MDBfODAwMCAgIDB4ZjgwMF9mZmZmICAgICBQSUIgKENTNCkJCSAgICAgMzJLQgorICo2LmQpIDB4ZjgwMV8wMDAwICAgMHhmODAxXzdmZmYgICAgIFBJQiAoQ1M1KQkJICAgICAzMktCCisgKjYuZSkgMHhmZTAwXzAwMDAgICAweGZmZmZfZmZmZiAgICAgRmxhc2ggICAgICAgICAgICAgICAgICAgMzJNQgorICoKKyAqTm90ZXM6CisgKiAgICBDQ1NSQkFSIGFuZCBMMi1hcy1TUkFNIGRvbid0IG5lZWQgYSBjb25maWd1cmVkIExvY2FsIEFjY2VzcyBXaW5kb3cuCisgKiAgICBJZiBmbGFzaCBpcyA4TSBhdCBkZWZhdWx0IHBvc2l0aW9uIChsYXN0IDhNKSwgbm8gTEFXIG5lZWRlZC4KKyAqCisgKiBUaGUgZGVmaW5lcyBiZWxvdyBhcmUgMS1vZmYgb2YgdGhlIGFjdHVhbCBMQVdBUjAgdXNhZ2UuCisgKiBTbyBMQVdBUjMgZGVmaW5lIHVzZXMgdGhlIExBV0FSNCByZWdpc3RlciBpbiB0aGUgRUNNLgorICovCisKKyNkZWZpbmUgTEFXQkFSMCAwCisjZGVmaW5lIExBV0FSMCAgKChMQVdBUl9UUkdUX0lGX0REUiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xMjhNKSkgJiB+TEFXQVJfRU4pCisKKyNkZWZpbmUgTEFXQkFSMSAoKENGR19QQ0kxX01FTV9CQVNFPj4xMikgJiAweGZmZmZmKQorI2RlZmluZSBMQVdBUjEJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0kxIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzI1Nk0pKQorCisjZGVmaW5lIExBV0JBUjIgKChDRkdfUEVYX01FTV9CQVNFPj4xMikgJiAweGZmZmZmKQorI2RlZmluZSBMQVdBUjIJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QRVggfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMjU2TSkpCisKKyNkZWZpbmUgTEFXQkFSMyAoKENGR19QQ0kxX0lPX1BIWVM+PjEyKSAmIDB4ZmZmZmYpCisjZGVmaW5lIExBV0FSMwkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfOE0pKQorCisjZGVmaW5lIExBV0JBUjQgKChDRkdfUEVYX0lPX1BIWVM+PjEyKSAmIDB4ZmZmZmYpCisjZGVmaW5lIExBV0FSNCAgKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QRVggfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMTZNKSkKKworCisjZGVmaW5lIExBV0JBUjUgKChDRkdfU1JJT19NRU1fQkFTRT4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVI1CShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUklPIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzI1Nk0pKQorCisvKiBMQkMgd2luZG93IC0gbWFwcyAyNTZNLiAgVGhhdCdzIFNEUkFNLCBCQ1NSLCBQSUJzLCBhbmQgRmxhc2ggKi8KKyNkZWZpbmUgTEFXQkFSNiAoKENGR19MQkNfU0RSQU1fQkFTRT4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVI2CShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfTEJDIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzI1Nk0pKQorCisJLnNlY3Rpb24gLmJvb3RwZywgImF4IgorCS5nbG9ibAlsYXdfZW50cnkKKworbGF3X2VudHJ5OgorCWVudHJ5X3N0YXJ0CisJLmxvbmcgKDRmLTNmKS84CiszOgorCS5sb25nIExBV0JBUjAsTEFXQVIwLExBV0JBUjEsTEFXQVIxLExBV0JBUjIsTEFXQVIyLExBV0JBUjMsTEFXQVIzCisJLmxvbmcgTEFXQkFSNCxMQVdBUjQsTEFXQkFSNSxMQVdBUjUsTEFXQkFSNixMQVdBUjYKKzQ6CisJZW50cnlfZW5kCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTY4bWRzL21wYzg1NjhtZHMuYyBiL2JvYXJkL21wYzg1NjhtZHMvbXBjODU2OG1kcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNzk2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM4NTY4bWRzL21wYzg1NjhtZHMuYwpAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBTY290dCBNY051dHQgPHNtY251dHRAYXJ0ZXN5bmNwLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8cGNpLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9pbW1hcF84NXh4Lmg+CisjaW5jbHVkZSA8c3BkLmg+CisKKyNpbmNsdWRlICJiY3NyLmgiCisKKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpICYmICFkZWZpbmVkKENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUikKK2V4dGVybiB2b2lkIGRkcl9lbmFibGVfZWNjKHVuc2lnbmVkIGludCBkcmFtX3NpemUpOworI2VuZGlmCisKK2V4dGVybiBsb25nIGludCBzcGRfc2RyYW0odm9pZCk7CisKK3ZvaWQgbG9jYWxfYnVzX2luaXQodm9pZCk7Cit2b2lkIHNkcmFtX2luaXQodm9pZCk7CisKK2ludCBib2FyZF9lYXJseV9pbml0X2YgKHZvaWQpCit7CisJLyoKKwkgKiBJbml0aWFsaXplIGxvY2FsIGJ1cy4KKwkgKi8KKwlsb2NhbF9idXNfaW5pdCAoKTsKKworCWVuYWJsZV84NTY4bWRzX2R1YXJ0KCk7CisJZW5hYmxlXzg1NjhtZHNfZmxhc2hfd3JpdGUoKTsKKworCXJldHVybiAwOworfQorCitpbnQgY2hlY2tib2FyZCAodm9pZCkKK3sKKwlwcmludGYgKCJCb2FyZDogODU2OCBNRFNcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK2xvbmcgaW50Citpbml0ZHJhbShpbnQgYm9hcmRfdHlwZSkKK3sKKwlsb25nIGRyYW1fc2l6ZSA9IDA7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCisJcHV0cygiSW5pdGlhbGl6aW5nXG4iKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9ETEwpCisJeworCQkvKgorCQkgKiBXb3JrIGFyb3VuZCB0byBzdGFiaWxpemUgRERSIERMTCBNU1lOQ19JTi4KKwkJICogRXJyYXRhIEREUjkgc2VlbXMgdG8gaGF2ZSBiZWVuIGZpeGVkLgorCQkgKiBUaGlzIGlzIG5vdyB0aGUgd29ya2Fyb3VuZCBmb3IgRXJyYXRhIEREUjExOgorCQkgKiAgICBPdmVycmlkZSBETEwgPSAxLCBDb3Vyc2UgQWRqID0gMSwgVGFwIFNlbGVjdCA9IDAKKwkJICovCisKKwkJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyPSAmaW1tYXAtPmltX2d1cjsKKworCQlndXItPmRkcmRsbGNyID0gMHg4MTAwMDAwMDsKKwkJYXNtKCJzeW5jO2lzeW5jO21zeW5jIik7CisJCXVkZWxheSgyMDApOworCX0KKyNlbmRpZgorCWRyYW1fc2l6ZSA9IHNwZF9zZHJhbSgpOworCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQorCS8qCisJICogSW5pdGlhbGl6ZSBhbmQgZW5hYmxlIEREUiBFQ0MuCisJICovCisJZGRyX2VuYWJsZV9lY2MoZHJhbV9zaXplKTsKKyNlbmRpZgorCS8qCisJICogU0RSQU0gSW5pdGlhbGl6YXRpb24KKwkgKi8KKwlzZHJhbV9pbml0KCk7CisKKwlwdXRzKCIgICAgRERSOiAiKTsKKwlyZXR1cm4gZHJhbV9zaXplOworfQorCisvKgorICogSW5pdGlhbGl6ZSBMb2NhbCBCdXMKKyAqLwordm9pZAorbG9jYWxfYnVzX2luaXQodm9pZCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gJmltbWFwLT5pbV9ndXI7CisJdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjID0gJmltbWFwLT5pbV9sYmM7CisKKwl1aW50IGNsa2RpdjsKKwl1aW50IGxiY19oejsKKwlzeXNfaW5mb190IHN5c2luZm87CisKKwlnZXRfc3lzX2luZm8oJnN5c2luZm8pOworCWNsa2RpdiA9IChsYmMtPmxjcnIgJiAweDBmKSAqIDI7CisJbGJjX2h6ID0gc3lzaW5mby5mcmVxU3lzdGVtQnVzIC8gMTAwMDAwMCAvIGNsa2RpdjsKKworCWd1ci0+bGJpdWlwbGxkY3IxID0gMHgwMDA3ODA4MDsKKwlpZiAoY2xrZGl2ID09IDE2KSB7CisJCWd1ci0+bGJpdWlwbGxkY3IwID0gMHg3YzBmMWJmMDsKKwl9IGVsc2UgaWYgKGNsa2RpdiA9PSA4KSB7CisJCWd1ci0+bGJpdWlwbGxkY3IwID0gMHg2YzBmMWJmMDsKKwl9IGVsc2UgaWYgKGNsa2RpdiA9PSA0KSB7CisJCWd1ci0+bGJpdWlwbGxkY3IwID0gMHg1YzBmMWJmMDsKKwl9CisKKwlsYmMtPmxjcnIgfD0gMHgwMDAzMDAwMDsKKworCWFzbSgic3luYztpc3luYzttc3luYyIpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBTRFJBTSBtZW1vcnkgb24gdGhlIExvY2FsIEJ1cy4KKyAqLwordm9pZAorc2RyYW1faW5pdCh2b2lkKQoreworI2lmIGRlZmluZWQoQ0ZHX09SMl9QUkVMSU0pICYmIGRlZmluZWQoQ0ZHX0JSMl9QUkVMSU0pCisKKwl1aW50IGlkeDsKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjID0gJmltbWFwLT5pbV9sYmM7CisJdWludCAqc2RyYW1fYWRkciA9ICh1aW50ICopQ0ZHX0xCQ19TRFJBTV9CQVNFOworCXVpbnQgbHNkbXJfY29tbW9uOworCisJcHV0cygiICAgIFNEUkFNOiAiKTsKKworCXByaW50X3NpemUgKENGR19MQkNfU0RSQU1fU0laRSAqIDEwMjQgKiAxMDI0LCAiXG4iKTsKKworCS8qCisJICogU2V0dXAgU0RSQU0gQmFzZSBhbmQgT3B0aW9uIFJlZ2lzdGVycworCSAqLworCWxiYy0+b3IyID0gQ0ZHX09SMl9QUkVMSU07CisJYXNtKCJtc3luYyIpOworCisJbGJjLT5icjIgPSBDRkdfQlIyX1BSRUxJTTsKKwlhc20oIm1zeW5jIik7CisKKwlsYmMtPmxiY3IgPSBDRkdfTEJDX0xCQ1I7CisJYXNtKCJtc3luYyIpOworCisKKwlsYmMtPmxzcnQgPSBDRkdfTEJDX0xTUlQ7CisJbGJjLT5tcnRwciA9IENGR19MQkNfTVJUUFI7CisJYXNtKCJtc3luYyIpOworCisJLyoKKwkgKiBNUEM4NTY4IHVzZXMgIm5ldyIgMTUtMTYgc3R5bGUgYWRkcmVzc2luZy4KKwkgKi8KKwlsc2Rtcl9jb21tb24gPSBDRkdfTEJDX0xTRE1SX0NPTU1PTjsKKwlsc2Rtcl9jb21tb24gfD0gQ0ZHX0xCQ19MU0RNUl9CU01BMTUxNjsKKworCS8qCisJICogSXNzdWUgUFJFQ0hBUkdFIEFMTCBjb21tYW5kLgorCSAqLworCWxiYy0+bHNkbXIgPSBsc2Rtcl9jb21tb24gfCBDRkdfTEJDX0xTRE1SX09QX1BDSEFMTDsKKwlhc20oInN5bmM7bXN5bmMiKTsKKwkqc2RyYW1fYWRkciA9IDB4ZmY7CisJcHBjRGNiZigodW5zaWduZWQgbG9uZykgc2RyYW1fYWRkcik7CisJdWRlbGF5KDEwMCk7CisKKwkvKgorCSAqIElzc3VlIDggQVVUTyBSRUZSRVNIIGNvbW1hbmRzLgorCSAqLworCWZvciAoaWR4ID0gMDsgaWR4IDwgODsgaWR4KyspIHsKKwkJbGJjLT5sc2RtciA9IGxzZG1yX2NvbW1vbiB8IENGR19MQkNfTFNETVJfT1BfQVJGUlNIOworCQlhc20oInN5bmM7bXN5bmMiKTsKKwkJKnNkcmFtX2FkZHIgPSAweGZmOworCQlwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSBzZHJhbV9hZGRyKTsKKwkJdWRlbGF5KDEwMCk7CisJfQorCisJLyoKKwkgKiBJc3N1ZSA4IE1PREUtc2V0IGNvbW1hbmQuCisJICovCisJbGJjLT5sc2RtciA9IGxzZG1yX2NvbW1vbiB8IENGR19MQkNfTFNETVJfT1BfTVJXOworCWFzbSgic3luYzttc3luYyIpOworCSpzZHJhbV9hZGRyID0gMHhmZjsKKwlwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSBzZHJhbV9hZGRyKTsKKwl1ZGVsYXkoMTAwKTsKKworCS8qCisJICogSXNzdWUgTk9STUFMIE9QIGNvbW1hbmQuCisJICovCisJbGJjLT5sc2RtciA9IGxzZG1yX2NvbW1vbiB8IENGR19MQkNfTFNETVJfT1BfTk9STUFMOworCWFzbSgic3luYzttc3luYyIpOworCSpzZHJhbV9hZGRyID0gMHhmZjsKKwlwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSBzZHJhbV9hZGRyKTsKKwl1ZGVsYXkoMjAwKTsgICAgLyogT3ZlcmtpbGwuIE11c3Qgd2FpdCA+IDIwMCBidXMgY3ljbGVzICovCisKKyNlbmRpZgkvKiBlbmFibGUgU0RSQU0gaW5pdCAqLworfQorCisjaWYgZGVmaW5lZChDRkdfRFJBTV9URVNUKQoraW50Cit0ZXN0ZHJhbSh2b2lkKQoreworCXVpbnQgKnBzdGFydCA9ICh1aW50ICopIENGR19NRU1URVNUX1NUQVJUOworCXVpbnQgKnBlbmQgPSAodWludCAqKSBDRkdfTUVNVEVTVF9FTkQ7CisJdWludCAqcDsKKworCXByaW50ZigiVGVzdGluZyBEUkFNIGZyb20gMHglMDh4IHRvIDB4JTA4eFxuIiwKKwkgICAgICAgQ0ZHX01FTVRFU1RfU1RBUlQsCisJICAgICAgIENGR19NRU1URVNUX0VORCk7CisKKwlwcmludGYoIkRSQU0gdGVzdCBwaGFzZSAxOlxuIik7CisJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKQorCQkqcCA9IDB4YWFhYWFhYWE7CisKKwlmb3IgKHAgPSBwc3RhcnQ7IHAgPCBwZW5kOyBwKyspIHsKKwkJaWYgKCpwICE9IDB4YWFhYWFhYWEpIHsKKwkJCXByaW50ZiAoIkRSQU0gdGVzdCBmYWlscyBhdDogJTA4eFxuIiwgKHVpbnQpIHApOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlwcmludGYoIkRSQU0gdGVzdCBwaGFzZSAyOlxuIik7CisJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKQorCQkqcCA9IDB4NTU1NTU1NTU7CisKKwlmb3IgKHAgPSBwc3RhcnQ7IHAgPCBwZW5kOyBwKyspIHsKKwkJaWYgKCpwICE9IDB4NTU1NTU1NTUpIHsKKwkJCXByaW50ZiAoIkRSQU0gdGVzdCBmYWlscyBhdDogJTA4eFxuIiwgKHVpbnQpIHApOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlwcmludGYoIkRSQU0gdGVzdCBwYXNzZWQuXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUENJKQorI2lmbmRlZiBDT05GSUdfUENJX1BOUAorc3RhdGljIHN0cnVjdCBwY2lfY29uZmlnX3RhYmxlIHBjaV9tcGM4NTY4bWRzX2NvbmZpZ190YWJsZVtdID0geworCXsKKwkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkgcGNpX2NmZ2Z1bmNfY29uZmlnX2RldmljZSwKKwkge1BDSV9FTkVUMF9JT0FERFIsCisJICBQQ0lfRU5FVDBfTUVNQUREUiwKKwkgIFBDSV9DT01NT05fTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSfQorCSB9LAorCXt9Cit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgaG9zZVtdID0geworI2lmbmRlZiBDT05GSUdfUENJX1BOUAorCXsgY29uZmlnX3RhYmxlOiBwY2lfbXBjODU2OG1kc19jb25maWdfdGFibGUsfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NUEM4NVhYX1BDSTIKKwl7fSwKKyNlbmRpZgorfTsKKworI2VuZGlmCS8qIENPTkZJR19QQ0kgKi8KKwordm9pZAorcGNpX2luaXRfYm9hcmQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUENJCisJcGNpX21wYzg1eHhfaW5pdCgmaG9zZSk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NjhtZHMvdS1ib290LmxkcyBiL2JvYXJkL21wYzg1NjhtZHMvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTA5OWY2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjODU2OG1kcy91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CisvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPworICAgX19EWU5BTUlDID0gMDsgICAgKi8KKworU0VDVElPTlMKK3sKKyAvKiBFTElPUiAtIEZyb20gUkFNOiAgRnJvbSBGTEFTSDogMHhGRkZGRkZGQyovCisgIC5yZXNldHZlYyAweEZGRkZGRkZDOgorICB7CisgICAgKigucmVzZXR2ZWMpCisgIH0gPSAweGZmZmYKKworICAvKihFTElPUiAtIEZyb20gUkFNOiAgRnJvbSBGTEFTSDogMHhGRkZGRjAwMCovCisgIC5ib290cGcgMHhGRkZGRjAwMDoKKyAgeworCWNwdS9tcGM4NXh4L3N0YXJ0Lm8JKC5ib290cGcpCisJYm9hcmQvbXBjODU2OG1kcy9pbml0Lm8gKC5ib290cGcpCisgIH0gPSAweGZmZmYKKworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9ICsgU0laRU9GX0hFQURFUlM7CisgIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQorICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KKyAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KKyAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KKyAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQorICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KSAJfQorICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9CisgIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpIAl9CisgIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKSAJfQorICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpIAl9CisgIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQorICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9CisgIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KKyAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KKyAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQorICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQorICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KKyAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQorICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KKyAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQorICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQorICAucGx0IDogeyAqKC5wbHQpIH0KKyAgLnRleHQgICAgICA6CisgIHsKKyAgICBjcHUvbXBjODV4eC9zdGFydC5vCSgudGV4dCkKKyAgICBib2FyZC9tcGM4NTY4bWRzL2luaXQubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvdHJhcHMubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvaW50ZXJydXB0cy5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9jcHVfaW5pdC5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9jcHUubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvc3BlZWQubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvcGNpLm8gKC50ZXh0KQorICAgIGNvbW1vbi9kbG1hbGxvYy5vICgudGV4dCkKKyAgICBsaWJfZ2VuZXJpYy9jcmMzMi5vICgudGV4dCkKKyAgICBsaWJfcHBjL2V4dGFibGUubyAoLnRleHQpCisgICAgbGliX2dlbmVyaWMvemxpYi5vICgudGV4dCkKKyAgICAqKC50ZXh0KQorICAgICooLmZpeHVwKQorICAgICooLmdvdDEpCisgICB9CisgICAgX2V0ZXh0ID0gLjsKKyAgICBQUk9WSURFIChldGV4dCA9IC4pOworICAgIC5yb2RhdGEgICAgOgorICAgeworICAgICooLnJvZGF0YSkKKyAgICAqKC5yb2RhdGExKQorICAgICooLnJvZGF0YS5zdHIxLjQpCisgICAgKiguZWhfZnJhbWUpCisgIH0KKyAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAorICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9CisgIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KKworICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KKyAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7CisgIF9lcm90ZXh0ID0gLjsKKyAgUFJPVklERSAoZXJvdGV4dCA9IC4pOworICAucmVsb2MgICA6CisgIHsKKyAgICAqKC5nb3QpCisgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAqKC5nb3QyKQorICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICooLmZpeHVwKQorICB9CisgIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+IDI7CisgIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXykgPj4gMjsKKworICAuZGF0YSAgICA6CisgIHsKKyAgICAqKC5kYXRhKQorICAgICooLmRhdGExKQorICAgICooLnNkYXRhKQorICAgICooLnNkYXRhMikKKyAgICAqKC5keW5hbWljKQorICAgIENPTlNUUlVDVE9SUworICB9CisgIF9lZGF0YSAgPSAgLjsKKyAgUFJPVklERSAoZWRhdGEgPSAuKTsKKworICAuID0gLjsKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKyAgLiA9IC47CisgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CisgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQorICBfX3N0b3BfX19leF90YWJsZSA9IC47CisKKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9iZWdpbiA9IC47CisgIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQorICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcyAgICAgICA6CisgIHsKKyAgICooLnNic3MpICooLnNjb21tb24pCisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgfQorICBfZW5kID0gLiA7CisgIFBST1ZJREUgKGVuZCA9IC4pOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODY0MWhwY24vTWFrZWZpbGUgYi9ib2FyZC9tcGM4NjQxaHBjbi9NYWtlZmlsZQppbmRleCA5NjI1MjExLi5kZjU2YjMxIDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4NjQxaHBjbi9NYWtlZmlsZQorKysgYi9ib2FyZC9tcGM4NjQxaHBjbi9NYWtlZmlsZQpAQCAtMjMsNiArMjMsMTAgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2ZyZWVzY2FsZS9jb21tb24pCitlbmRpZgorCiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKIENPQkpTCTo9ICQoQk9BUkQpLm8gc3lzX2VlcHJvbS5vIFwKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg2NDFocGNuL2NvbmZpZy5tayBiL2JvYXJkL21wYzg2NDFocGNuL2NvbmZpZy5tawppbmRleCA5ODlhNDBiLi5mNzc4ZGNiIDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4NjQxaHBjbi9jb25maWcubWsKKysrIGIvYm9hcmQvbXBjODY0MWhwY24vY29uZmlnLm1rCkBAIC0yNSw3ICsyNSw3IEBACiAjIGRlZmF1bHQgQ0NTUkJBUiBpcyBhdCAweGZmNzAwMDAwCiAjIGFzc3VtZSBVLUJvb3QgaXMgbGVzcyB0aGFuIDAuNU1CCiAjCi1URVhUX0JBU0UgPSAweGZmZjAxMDAwCitURVhUX0JBU0UgPSAweGZmZjAwMDAwCiAKIFBMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX01QQzg2eHg9MQogUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfTVBDODY0MT0xIC1tYWx0aXZlYyAtbWFiaT1hbHRpdmVjIC1tc29mdC1mbG9hdApkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODY0MWhwY24vaW5pdC5TIGIvYm9hcmQvbXBjODY0MWhwY24vaW5pdC5TCmluZGV4IDZiM2UyZDIuLmNiMjFiYTYgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wYzg2NDFocGNuL2luaXQuUworKysgYi9ib2FyZC9tcGM4NjQxaHBjbi9pbml0LlMKQEAgLTU5LDcgKzU5LDcgQEAKICNkZWZpbmUgTEFXQVIyCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJMSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKSkKIAogI2RlZmluZSBMQVdCQVIzICgoQ0ZHX1BDSTJfTUVNX0JBU0U+PjEyKSAmIDB4ZmZmZmZmKQotI2RlZmluZSBMQVdBUjMJKH5MQVdBUl9FTiAmIChMQVdBUl9UUkdUX0lGX1BDSTIgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNTEyTSkpKQorI2RlZmluZSBMQVdBUjMJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0kyIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pKQogCiAvKgogICogVGhpcyBpcyBub3Qgc28gbXVjaCB0aGUgU0RSQU0gbWFwIGFzIGl0IGlzIHRoZSB3aG9sZSBsb2NhbGJ1cyBtYXAuCkBAIC02NywxMSArNjcsMTEgQEAKICNkZWZpbmUgTEFXQkFSNCAoKDB4ZjgxMDAwMDA+PjEyKSAmIDB4ZmZmZmZmKQogI2RlZmluZSBMQVdBUjQJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9MQkMgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMk0pKQogCi0jZGVmaW5lIExBV0JBUjUgKChDRkdfUENJMV9JT19CQVNFPj4xMikgJiAweGZmZmZmZikKKyNkZWZpbmUgTEFXQkFSNSAoKENGR19QQ0kxX0lPX1BIWVM+PjEyKSAmIDB4ZmZmZmZmKQogI2RlZmluZSBMQVdBUjUJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0kxIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzE2TSkpCiAKLSNkZWZpbmUgTEFXQkFSNiAoKENGR19QQ0kyX0lPX0JBU0U+PjEyKSAmIDB4ZmZmZmZmKQotI2RlZmluZSBMQVdBUjYJKH5MQVdBUl9FTiAmKCBMQVdBUl9UUkdUX0lGX1BDSTIgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMTZNKSkpCisjZGVmaW5lIExBV0JBUjYgKChDRkdfUENJMl9JT19QSFlTPj4xMikgJiAweGZmZmZmZikKKyNkZWZpbmUgTEFXQVI2CShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xNk0pKQogCiAjZGVmaW5lIExBV0JBUjcgKCgweGZlMDAwMDAwID4+MTIpICYgMHhmZmZmZmYpCiAjZGVmaW5lIExBV0FSNwkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX0xCQyB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8zMk0pKQpAQCAtODQsNyArODQsNyBAQAogI2RlZmluZSBMQVdBUjggICgoTEFXQVJfVFJHVF9JRl9ERFIyIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pKSAmIH5MQVdBUl9FTikKICNlbmRpZgogCi0jZGVmaW5lIExBV0JBUjkgKChDRkdfUklPX01FTV9CQVNFPj4xMikgJiAweGZmZmZmKQorI2RlZmluZSBMQVdCQVI5ICgoQ0ZHX1JJT19NRU1fUEhZUz4+MTIpICYgMHhmZmZmZikKICNkZWZpbmUgTEFXQVI5ICAoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1JJTyB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKSkKIAogCS5zZWN0aW9uIC5ib290cGcsICJheCIKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg2NDFocGNuL3UtYm9vdC5sZHMgYi9ib2FyZC9tcGM4NjQxaHBjbi91LWJvb3QubGRzCmluZGV4IDEzYzFhY2YuLjM0YjUwZTQgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wYzg2NDFocGNuL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvbXBjODY0MWhwY24vdS1ib290LmxkcwpAQCAtMSw3ICsxLDUgQEAKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDQsIEZyZWVzY2FsZSwgSW5jLgotICogKEMpIENvcHlyaWdodCAyMDAyLDIwMDMsIE1vdG9yb2xhLEluYy4KLSAqIEplZmYgQnJvd24KKyAqIENvcHlyaWdodCAyMDA2LCAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCkBAIC0yMywyNCArMjEsMTEgQEAKICAqLwogCiBPVVRQVVRfQVJDSChwb3dlcnBjKQotU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7Ci0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KKwogU0VDVElPTlMKIHsKLSAgLnJlc2V0dmVjIDB4RkZGMDAxMDAgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAuYm9vdHBnIDB4RkZGNzAwMDAgOgotICB7Ci0gICAgY3B1L21wYzg2eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgICBib2FyZC9tcGM4NjQxaHBjbi9pbml0Lm8gKC5ib290cGcpCi0gIH0gPSAweGZmZmYKIAogICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgMTAyNDsKICAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CiAgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQogICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQpAQCAtNjYsNyArNTEsNyBAQAogICAudGV4dCAgICAgIDoKICAgewogICAgIGNwdS9tcGM4Nnh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGJvYXJkL21wYzg2NDFocGNuL2luaXQubyAoLnRleHQpCisgICAgYm9hcmQvbXBjODY0MWhwY24vaW5pdC5vICguYm9vdHBnKQogICAgIGNwdS9tcGM4Nnh4L3RyYXBzLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4Nnh4L2ludGVycnVwdHMubyAoLnRleHQpCiAgICAgY3B1L21wYzg2eHgvY3B1X2luaXQubyAoLnRleHQpCkBAIC04OCw2ICs3Myw3IEBACiAgICAgKigucm9kYXRhKQogICAgICooLnJvZGF0YTEpCiAgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgICAqKC5laF9mcmFtZSkKICAgfQogICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCiAgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KZGlmZiAtLWdpdCBhL2JvYXJkL25jNjUwL2NvbmZpZy5tayBiL2JvYXJkL25jNjUwL2NvbmZpZy5tawppbmRleCA1MmM4ZmZlLi45ZDliODkyIDEwMDY0NAotLS0gYS9ib2FyZC9uYzY1MC9jb25maWcubWsKKysrIGIvYm9hcmQvbmM2NTAvY29uZmlnLm1rCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDYgRGV0bGV2IFp1bmRlbCwgZHp1QGRlbnguZGUKKyMgKEMpIENvcHlyaWdodCAyMDA2LCAyMDA3IERldGxldiBadW5kZWwsIGR6dUBkZW54LmRlCiAjIChDKSBDb3B5cmlnaHQgMjAwNAogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwpAQCAtMjcsNCArMjcsMyBAQAogIwogCiBURVhUX0JBU0UgPSAweDQwNzAwMDAwCi1CT0FSRExJQlMgPSAkKG9iailkcml2ZXJzL25hbmQvbGlibmFuZC5hCmRpZmYgLS1naXQgYS9ib2FyZC9uYzY1MC9uYzY1MC5jIGIvYm9hcmQvbmM2NTAvbmM2NTAuYwppbmRleCA4YTZiNWIwLi43MDdlNGI5IDEwMDY0NAotLS0gYS9ib2FyZC9uYzY1MC9uYzY1MC5jCisrKyBiL2JvYXJkL25jNjUwL25jNjUwLmMKQEAgLTE3NywxNiArMTc3LDE0IEBACiAJICoKIAkgKiB0cnkgOCBjb2x1bW4gbW9kZQogCSAqLwotCXNpemU4ID0gZHJhbV9zaXplIChDRkdfTUFNUl84Q09MLCAodWxvbmcgKikgU0RSQU1fQkFTRTNfUFJFTElNLAotCQkJCQkgICBTRFJBTV9NQVhfU0laRSk7CisJc2l6ZTggPSBkcmFtX3NpemUgKENGR19NQU1SXzhDT0wsIFNEUkFNX0JBU0UzX1BSRUxJTSwgU0RSQU1fTUFYX1NJWkUpOwogCiAJdWRlbGF5ICgxMDAwKTsKIAogCS8qCiAJICogdHJ5IDkgY29sdW1uIG1vZGUKIAkgKi8KLQlzaXplOSA9IGRyYW1fc2l6ZSAoQ0ZHX01BTVJfOUNPTCwgKHVsb25nICopIFNEUkFNX0JBU0UzX1BSRUxJTSwKLQkJCQkJICBTRFJBTV9NQVhfU0laRSk7CisJc2l6ZTkgPSBkcmFtX3NpemUgKENGR19NQU1SXzlDT0wsIFNEUkFNX0JBU0UzX1BSRUxJTSwgU0RSQU1fTUFYX1NJWkUpOwogCiAJdWRlbGF5ICgxMDAwKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvcHJvZHJpdmUvcGRuYjMvY29uZmlnLm1rIGIvYm9hcmQvcHJvZHJpdmUvcGRuYjMvY29uZmlnLm1rCmluZGV4IDc2NzA3NTguLjUxZGVlODYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3Byb2RyaXZlL3BkbmIzL2NvbmZpZy5taworKysgYi9ib2FyZC9wcm9kcml2ZS9wZG5iMy9jb25maWcubWsKQEAgLTEsNCArMSwyIEBACisjCiBURVhUX0JBU0UgPSAweDAxZjAwMDAwCi0KLSMgaW5jbHVkZSBOUEUgZXRoZXJuZXQgZHJpdmVyCi1CT0FSRExJQlMgPSAkKG9iailjcHUvaXhwL25wZS9saWJucGUuYQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2llbWVucy9TTU40Mi9NYWtlZmlsZSBiL2JvYXJkL3NpZW1lbnMvU01ONDIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3YjU0YgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NpZW1lbnMvU01ONDIvTWFrZWZpbGUKQEAgLTAsMCArMSw1MSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDcKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKKworQ09CSlMJOj0gZmxhc2gubyBzbW40Mi5vCitTT0JKVFMJOj0gbG93bGV2ZWxfaW5pdC5vCisKK1NSQ1MJOj0gJChTT0JKVFM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpUUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2llbWVucy9TTU40Mi9jb25maWcubWsgYi9ib2FyZC9zaWVtZW5zL1NNTjQyL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjhmNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc2llbWVucy9TTU40Mi9jb25maWcubWsKQEAgLTAsMCArMSwzMCBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CisjIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyMKKyMgKEMpIENvcHlyaWdodCAyMDAwCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKKyNhZGRyZXNzIHdoZXJlIHUtYm9vdCB3aWxsIGJlIHJlbG9jYXRlZAorI1RFWFRfQkFTRSA9IDB4MAorVEVYVF9CQVNFID0gMHg4MTUwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvc2llbWVucy9TTU40Mi9mbGFzaC5jIGIvYm9hcmQvc2llbWVucy9TTU40Mi9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkNDk3N2UKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zaWVtZW5zL1NNTjQyL2ZsYXNoLmMKQEAgLTAsMCArMSw0NzUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYgRW1iZWRkZWQgQXJ0aXN0cyBBQiA8d3d3LmVtYmVkZGVkYXJ0aXN0cy5jb20+CisgKgorICogKEMpIENvcHlyaWdodCAyMDA3IEdhcnkgSmVubmVqb2huIGdhcnlqQGRlbnguZGUKKyAqIE1vZGlmaWVkIHRvIHVzZSB0aGUgcm91dGluZXMgaW4gY3B1L2FybTcyMHQvbHBjMjI5Mi9mbGFzaC5jLgorICogSGVhdmlseSBtb2RpZmllZCB0byBzdXBwb3J0IHRoZSBTTU40MiBib2FyZCBmcm9tIFNpZW1lbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZsYXNoX2FkZHJfdGFibGVbQ0ZHX01BWF9GTEFTSF9CQU5LU10gPSBDRkdfRkxBU0hfQkFOS1NfTElTVDsKK2ZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOworCitleHRlcm4gaW50IGxwYzIyOTJfY29weV9idWZmZXJfdG9fZmxhc2goZmxhc2hfaW5mb190ICosIHVsb25nKTsKK2V4dGVybiBpbnQgbHBjMjI5Ml9mbGFzaF9lcmFzZShmbGFzaF9pbmZvX3QgKiwgaW50LCBpbnQpOworZXh0ZXJuIGludCBscGMyMjkyX3dyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqLCB1Y2hhciAqLCB1bG9uZywgdWxvbmcpOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh0X2ZsYXNoX2luaXQodm9pZCk7CitzdGF0aWMgaW50IGV4dF9mbGFzaF9lcmFzZShmbGFzaF9pbmZvX3QgKiwgaW50LCBpbnQpOworc3RhdGljIGludCBleHRfd3JpdGVfYnVmZihmbGFzaF9pbmZvX3QgKiwgdWNoYXIgKiwgdWxvbmcsIHVsb25nKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3Vsb25nIGZsYXNoX2luaXQgKHZvaWQpCit7CisJaW50IGosIGs7CisJdWxvbmcgc2l6ZSA9IDA7CisJdWxvbmcgZmxhc2hiYXNlID0gMDsKKworCWZsYXNoX2luZm9bMF0uZmxhc2hfaWQgPSBQSElMSVBTX0xQQzIyOTI7CisJZmxhc2hfaW5mb1swXS5zaXplID0gMHgwMDNFMDAwOwkvKiAyNTYgLSA4IEtCICovCisJZmxhc2hfaW5mb1swXS5zZWN0b3JfY291bnQgPSAxNzsKKwltZW1zZXQgKGZsYXNoX2luZm9bMF0ucHJvdGVjdCwgMCwgMTcpOworCWZsYXNoYmFzZSA9IDB4MDAwMDAwMDA7CisJZm9yIChqID0gMCwgayA9IDA7IGogPCA4OyBqKyssIGsrKykgeworCQlmbGFzaF9pbmZvWzBdLnN0YXJ0W2tdID0gZmxhc2hiYXNlOworCQlmbGFzaGJhc2UgKz0gMHgwMDAwMjAwMDsKKwl9CisJZm9yIChqID0gMDsgaiA8IDI7IGorKywgaysrKSB7CisJCWZsYXNoX2luZm9bMF0uc3RhcnRba10gPSBmbGFzaGJhc2U7CisJCWZsYXNoYmFzZSArPSAweDAwMDEwMDAwOworCX0KKwlmb3IgKGogPSAwOyBqIDwgNzsgaisrLCBrKyspIHsKKwkJZmxhc2hfaW5mb1swXS5zdGFydFtrXSA9IGZsYXNoYmFzZTsKKwkJZmxhc2hiYXNlICs9IDB4MDAwMDIwMDA7CisJfQorCXNpemUgKz0gZmxhc2hfaW5mb1swXS5zaXplOworCisJLyogUHJvdGVjdCBtb25pdG9yIGFuZCBlbnZpcm9ubWVudCBzZWN0b3JzICovCisJZmxhc2hfcHJvdGVjdCAoRkxBR19QUk9URUNUX1NFVCwKKwkJIDB4MCwKKwkJIDB4MCArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKKwkJICZmbGFzaF9pbmZvWzBdKTsKKworCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9TRVQsCisJCSBDRkdfRU5WX0FERFIsCisJCSBDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLAorCQkgJmZsYXNoX2luZm9bMF0pOworCisJc2l6ZSArPSBleHRfZmxhc2hfaW5pdCgpOworCisJcmV0dXJuIHNpemU7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZCBmbGFzaF9wcmludF9pbmZvIChmbGFzaF9pbmZvX3QgKiBpbmZvKQoreworCWludCBpOworCWludCBlcmFzZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgajsKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCXVuc2lnbmVkIGNoYXIgKnA7CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKKwljYXNlIChQSElMSVBTX0xQQzIyOTIgJiBGTEFTSF9WRU5ETUFTSyk6CisJCXByaW50ZigiUGhpbGlwczogIik7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfTUFOX0FNRDoKKwkJcHJpbnRmKCJBTUQ6ICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYgKCJVbmtub3duIFZlbmRvciAiKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7CisJY2FzZSAoUEhJTElQU19MUEMyMjkyICYgRkxBU0hfVFlQRU1BU0spOgorCQlwcmludGYoIkxQQzIyOTIgaW50ZXJuYWwgZmxhc2hcbiIpOworCQlicmVhazsKKwljYXNlIEZMQVNIX1MyOUdMMTI4TjoKKwkJcHJpbnRmICgiUzI5R0wxMjhOICgxMjggTWJpdCwgdW5pZm9ybSBzZWN0b3Igc2l6ZSlcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ZiAoIiAgU2l6ZTogJWxkIEtCIGluICVkIFNlY3RvcnNcbiIsCisJICBpbmZvLT5zaXplID4+IDEwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCisJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQlpZiAoKGkgJSA1KSA9PSAwKSB7CisJCQlwcmludGYgKCJcbiAgICIpOworCQl9CisJCWlmIChpIDwgKGluZm8tPnNlY3Rvcl9jb3VudCAtIDEpKSB7CisJCQljb3VudCA9IGluZm8tPnN0YXJ0W2krMV0gLSBpbmZvLT5zdGFydFtpXTsKKwkJfQorCQllbHNlIHsKKwkJCWNvdW50ID0gaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplIC0gaW5mby0+c3RhcnRbaV07CisJCX0KKwkJcCA9ICh1bnNpZ25lZCBjaGFyKikoaW5mby0+c3RhcnRbaV0pOworCQllcmFzZWQgPSAxOworCQlmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykgeworCQkJaWYgKCpwICE9IDB4RkYpIHsKKwkJCQllcmFzZWQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJcCsrOworCQl9CisJCXByaW50ZiAoIiAlMDhsWCVzJXMiLCBpbmZvLT5zdGFydFtpXSwgaW5mby0+cHJvdGVjdFtpXSA/ICIgUk8iIDogIiAgICIsCisJCQllcmFzZWQgPyAiIEUiIDogIiAgIik7CisJfQorCXByaW50ZiAoIlxuIik7Cit9CisKK2ludCBmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCit7CisJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7CisJCWNhc2UgKFBISUxJUFNfTFBDMjI5MiAmIEZMQVNIX1RZUEVNQVNLKToKKwkJCXJldHVybiBscGMyMjkyX2ZsYXNoX2VyYXNlKGluZm8sIHNfZmlyc3QsIHNfbGFzdCk7CisJCWNhc2UgRkxBU0hfUzI5R0wxMjhOOgorCQkJcmV0dXJuIGV4dF9mbGFzaF9lcmFzZShpbmZvLCBzX2ZpcnN0LCBzX2xhc3QpOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEVSUl9QUk9URUNURUQ7CisJfQorCXJldHVybiBFUlJfUFJPVEVDVEVEOworfQorCitpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgKiBzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKK3sKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKKwkJY2FzZSAoUEhJTElQU19MUEMyMjkyICYgRkxBU0hfVFlQRU1BU0spOgorCQkJcmV0dXJuIGxwYzIyOTJfd3JpdGVfYnVmZihpbmZvLCBzcmMsIGFkZHIsIGNudCk7CisJCWNhc2UgRkxBU0hfUzI5R0wxMjhOOgorCQkJcmV0dXJuIGV4dF93cml0ZV9idWZmKGluZm8sIHNyYywgYWRkciwgY250KTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBFUlJfUFJPR19FUlJPUjsKKwl9CisJcmV0dXJuIEVSUl9QUk9HX0VSUk9SOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGcm9tIGhlcmUgb24gaXMgY29kZSBmb3IgdGhlIGV4dGVybmFsIFMyOUdMMTI4TiB0YWtlbiBmcm9tIGNhbTUyMDBfZmxhc2guYworICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dPUkRfU0laRSB1bnNpZ25lZCBzaG9ydAorCitzdGF0aWMgaW50IHdhaXRfZm9yX0RRN18zMihmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2VjdCkKK3sKKwl1bG9uZyBzdGFydCwgbm93LCBsYXN0OworCXZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKmFkZHIgPQorCQkoQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqKSAoaW5mby0+c3RhcnRbc2VjdF0pOworCisJc3RhcnQgPSBnZXRfdGltZXIoMCk7CisJbGFzdCA9IHN0YXJ0OworCXdoaWxlICgoYWRkclswXSAmIChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwODAwMDgwKSAhPQorCQkJKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDA4MDAwODApIHsKKwkJaWYgKChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CisJCQlwcmludGYoIlRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCS8qIHNob3cgdGhhdCB3ZSdyZSB3YWl0aW5nICovCisJCWlmICgobm93IC0gbGFzdCkgPiAxMDAwKSB7CS8qIGV2ZXJ5IHNlY29uZCAqLworCQkJcHV0YygnLicpOworCQkJbGFzdCA9IG5vdzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGV4dF9mbGFzaF9lcmFzZShmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKK3sKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKikgKGluZm8tPnN0YXJ0WzBdKTsKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyMjsKKwlpbnQgZmxhZywgcHJvdCwgc2VjdCwgbF9zZWN0LCByZXQ7CisKKwlyZXQgPSAwOworCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgeworCQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikKKwkJCXByaW50ZigiLSBtaXNzaW5nXG4iKTsKKwkJZWxzZQorCQkJcHJpbnRmKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlwcmludGYoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcm90ID0gMDsKKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgKytzZWN0KSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKQorCQkJcHJvdCsrOworCX0KKworCWlmIChwcm90KQorCQlwcmludGYoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkISIsIHByb3QpOworCisJcHJpbnRmKCJcbiIpOworCisJbF9zZWN0ID0gLTE7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKwlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KKwkJCWFkZHIyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKikgKGluZm8tPnN0YXJ0W3NlY3RdKTsKKworCQkJYWRkcltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDBBQTAwQUE7CisJCQlhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwkJCWFkZHJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwODAwMDgwOworCQkJYWRkcltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDBBQTAwQUE7CisJCQlhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwkJCWFkZHIyWzBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDAzMDAwMzA7CS8qIHNlY3RvciBlcmFzZSAqLworCisJCQlsX3NlY3QgPSBzZWN0OworCQkJLyoKKwkJCSAqIFdhaXQgZm9yIGVhY2ggc2VjdG9yIHRvIGNvbXBsZXRlLCBpdCdzIG1vcmUKKwkJCSAqIHJlbGlhYmxlLiAgQWNjb3JkaW5nIHRvIEFNRCBTcGVjLCB5b3UgbXVzdAorCQkJICogaXNzdWUgYWxsIGVyYXNlIGNvbW1hbmRzIHdpdGhpbiBhIHNwZWNpZmllZAorCQkJICogdGltZW91dC4gIFRoaXMgaGFzIGJlZW4gc2VlbiB0byBmYWlsLCBlc3BlY2lhbGx5CisJCQkgKiBpZiBwcmludGYoKXMgYXJlIGluY2x1ZGVkIChmb3IgZGVidWcpISEKKwkJCSAqLworCQkJcmV0ID0gd2FpdF9mb3JfRFE3XzMyKGluZm8sIHNlY3QpOworCQkJaWYgKHJldCkgeworCQkJCXJldCA9IEVSUl9QUk9URUNURUQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoZmxhZykKKwkJZW5hYmxlX2ludGVycnVwdHMoKTsKKworCS8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLworCXVkZWxheSgxMDAwKTsKKworCS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLworCWFkZHIgPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqKSBpbmZvLT5zdGFydFswXTsKKwlhZGRyWzBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDBGMDAwRjA7CS8qIHJlc2V0IGJhbmsgKi8KKworCWlmIChyZXQpCisJCXByaW50ZigiIGVycm9yXG4iKTsKKwllbHNlCisJCXByaW50ZigiIGRvbmVcbiIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZSh2dV9sb25nICogYWRkciwgZmxhc2hfaW5mb190ICogaW5mbykKK3sKKwlzaG9ydCBpOworCUNGR19GTEFTSF9XT1JEX1NJWkUgdmFsdWU7CisJdWxvbmcgYmFzZSA9ICh1bG9uZykgYWRkcjsKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChDRkdfRkxBU0hfV09SRF9TSVpFICopIGFkZHI7CisKKwkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLworCWFkZHIyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEFBMDBBQTsKKwlhZGRyMltDRkdfRkxBU0hfQUREUjFdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDA1NTAwNTU7CisJYWRkcjJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwOTAwMDkwOworCXVkZWxheSgxMDAwKTsKKworCXZhbHVlID0gYWRkcjJbMF07CisKKwlzd2l0Y2ggKHZhbHVlKSB7CisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEFNRF9NQU5VRkFDVDoKKwkJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKKwkJCWluZm8tPnNpemUgPSAwOworCQkJcmV0dXJuICgwKTsJLyogbm8gb3IgdW5rbm93biBmbGFzaCAgKi8KKwl9CisKKwl2YWx1ZSA9IGFkZHIyWzFdOwkvKiBkZXZpY2UgSUQgICAgICAgICAgICAqLworCisJc3dpdGNoICh2YWx1ZSkgeworCQljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9NSVJST1I6CisJCQl2YWx1ZSA9IGFkZHIyWzE0XTsKKwkJCXN3aXRjaCh2YWx1ZSkgeworCQkJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpQU1EX0lEX0dMMTI4Tl8yOgorCQkJCQl2YWx1ZSA9IGFkZHIyWzE1XTsKKwkJCQkJaWYgKHZhbHVlICE9IChDRkdfRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9HTDEyOE5fMykgeworCQkJCQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQkJCQl9IGVsc2UgeworCQkJCQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfUzI5R0wxMjhOOworCQkJCQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTI4OworCQkJCQkJaW5mby0+c2l6ZSA9IDB4MDEwMDAwMDA7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQkJCQlyZXR1cm4oMCk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQkJcmV0dXJuICgwKTsJLyogPT4gbm8gb3IgdW5rbm93biBmbGFzaCAqLworCX0KKworCS8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRkcmVzcyB0YWJsZSAqLworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKKwkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDIwMDAwKTsKKworCS8qIGNoZWNrIGZvciBwcm90ZWN0ZWQgc2VjdG9ycyAqLworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQkvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLworCQkvKiBEMCA9IDEgaWYgcHJvdGVjdGVkICovCisJCWFkZHIyID0gKHZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbaV0pOworCisJCWluZm8tPnByb3RlY3RbaV0gPSBhZGRyMlsyXSAmIDE7CisJfQorCisJLyogaXNzdWUgYmFuayByZXNldCB0byByZXR1cm4gdG8gcmVhZCBtb2RlICovCisJYWRkcjJbMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEYwMDBGMDsKKworCXJldHVybiAoaW5mby0+c2l6ZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4dF9mbGFzaF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9iID0gMDsKKwl1bnNpZ25lZCBsb25nIHNpemVfYltDRkdfTUFYX0ZMQVNIX0JBTktTXTsKKwlpbnQgaTsKKworCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KKwlmb3IgKGkgPSAxOyBpIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKSB7CisJCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQlmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudCA9IC0xOworCQlmbGFzaF9pbmZvW2ldLnNpemUgPSAwOworCisJCS8qIGNhbGwgZmxhc2hfZ2V0X3NpemUoKSB0byBpbml0aWFsaXplIHNlY3RvciBhZGRyZXNzICovCisJCXNpemVfYltpXSA9IGZsYXNoX2dldF9zaXplKCh2dV9sb25nICopIGZsYXNoX2FkZHJfdGFibGVbaV0sCisJCQkJJmZsYXNoX2luZm9baV0pOworCisJCWZsYXNoX2luZm9baV0uc2l6ZSA9IHNpemVfYltpXTsKKworCQlpZiAoZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCQlwcmludGYoIiMjIFVua25vd24gRkxBU0ggb24gQmFuayAlZCAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAorCQkJCQlpKzEsIHNpemVfYltpXSwgc2l6ZV9iW2ldIDw8IDIwKTsKKwkJCWZsYXNoX2luZm9baV0uc2VjdG9yX2NvdW50ID0gLTE7CisJCQlmbGFzaF9pbmZvW2ldLnNpemUgPSAwOworCQl9CisKKwkJdG90YWxfYiArPSBmbGFzaF9pbmZvW2ldLnNpemU7CisJfQorCisJcmV0dXJuIHRvdGFsX2I7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfd29yZChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBkZXN0LCB1c2hvcnQgZGF0YSkKK3sKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChDRkdfRkxBU0hfV09SRF9TSVpFICopIChpbmZvLT5zdGFydFswXSk7CisJdm9sYXRpbGUgQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqZGVzdDIgPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqKSBkZXN0OworCXZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKmRhdGEyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKikgJmRhdGE7CisJdWxvbmcgc3RhcnQ7CisJaW50IGZsYWc7CisKKwkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KKwlpZiAoKCpkZXN0MiAmICpkYXRhMikgIT0gKmRhdGEyKSB7CisJCXJldHVybiAoMik7CisJfQorCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisJYWRkcjJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwQUEwMEFBOworCWFkZHIyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwlhZGRyMltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDBBMDAwQTA7CisJKmRlc3QyID0gKmRhdGEyOworCisJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGZsYWcpCisJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCisJc3RhcnQgPSBnZXRfdGltZXIoMCk7CisJd2hpbGUgKCgqZGVzdDIgJiAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDgwMDA4MCkgIT0KKwkJCSgqZGF0YTIgJiAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDgwMDA4MCkpIHsKKworCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7CisJCQlwcmludGYoIldSSVRFX1RPVVRcbiIpOworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIGlzIHRha2VuIGZyb20gdGhlIG9yaWdpbmFsIGZsYXNoLmMgZm9yIHRoZSBMUEMyMjkyIFNPRElNTSBib2FyZAorICogYW5kIG1vZGlmaWVkIHRvIHN1aXQuCisgKi8KKworaW50IGV4dF93cml0ZV9idWZmKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyICogc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCit7CisJdXNob3J0IHRtcDsKKwl1bG9uZyBpOworCXVjaGFyKiBzcmNfb3JnOworCXVjaGFyKiBkc3Rfb3JnOworCXVsb25nIGNudF9vcmcgPSBjbnQ7CisJaW50IHJldCA9IEVSUl9PSzsKKworCXNyY19vcmcgPSBzcmM7CisJZHN0X29yZyA9ICh1Y2hhciopYWRkcjsKKworCWlmIChhZGRyICYgMSkgewkJLyogaWYgb2RkIGFkZHJlc3MgKi8KKwkJdG1wID0gKigodWNoYXIqKShhZGRyIC0gMSkpOyAvKiBsaXR0bGUgZW5kaWFuICovCisJCXRtcCB8PSAoKnNyYyA8PCA4KTsKKwkJaWYgKHdyaXRlX3dvcmQoaW5mbywgYWRkciAtIDEsIHRtcCkpCisJCQlyZXR1cm4gRVJSX1BST0dfRVJST1I7CisJCWFkZHIgKz0gMTsKKwkJY250IC09IDE7CisJCXNyYysrOworCX0KKwl3aGlsZSAoY250ID4gMSkgeworCQl0bXAgPSAoKCooc3JjKzEpKSA8PCA4KSArICgqc3JjKTsgLyogbGl0dGxlIGVuZGlhbiAqLworCQlpZiAod3JpdGVfd29yZChpbmZvLCBhZGRyLCB0bXApKQorCQkJcmV0dXJuIEVSUl9QUk9HX0VSUk9SOworCQlhZGRyICs9IDI7CisJCXNyYyArPSAyOworCQljbnQgLT0gMjsKKwl9CisJaWYgKGNudCA+IDApIHsKKwkJdG1wID0gKCooKHVjaGFyKikoYWRkciArIDEpKSkgPDwgODsKKwkJdG1wIHw9ICpzcmM7CisJCWlmICh3cml0ZV93b3JkKGluZm8sIGFkZHIsIHRtcCkpCisJCQlyZXR1cm4gRVJSX1BST0dfRVJST1I7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNudF9vcmc7IGkrKykgeworCQlpZiAoKmRzdF9vcmcgIT0gKnNyY19vcmcpIHsKKwkJCXByaW50ZigiV3JpdGUgZmFpbGVkLiBCeXRlICVsWCBkaWZmZXJzXG4iLCBpKTsKKwkJCXJldCA9IEVSUl9QUk9HX0VSUk9SOworCQkJYnJlYWs7CisJCX0KKwkJZHN0X29yZysrOworCQlzcmNfb3JnKys7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL3NpZW1lbnMvU01ONDIvbG93bGV2ZWxfaW5pdC5TIGIvYm9hcmQvc2llbWVucy9TTU40Mi9sb3dsZXZlbF9pbml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhYmI2MwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NpZW1lbnMvU01ONDIvbG93bGV2ZWxfaW5pdC5TCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2IEVtYmVkZGVkIEFydGlzdHMgQUIgPHd3dy5lbWJlZGRlZGFydGlzdHMuY29tPgorICoKKyAqIFNsaWdodCBtb2RpZmljYXRpb25zIG1hZGUgdG8gc3VwcG9ydCB0aGUgU01ONDIgYm9hcmQgZnJvbSBTaWVtZW5zLgorICogMjAwNyBHYXJ5IEplbm5lam9obiBnYXJ5akBkZW54LmRlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisvKiBzb21lIHBhcmFtZXRlcnMgZm9yIHRoZSBib2FyZCAqLworLyogc2V0dGluZyB1cCB0aGUgQ1BVLWludGVybmFsIG1lbW9yeSAqLworI2RlZmluZSAJU1JBTV9TVEFSVCAJMHg0MDAwMDAwMAorI2RlZmluZSAJU1JBTV9TSVpFCTB4MDAwMDQwMDAKKyNkZWZpbmUgICBCQ0ZHMF9WQUxVRSAweDEwMDBmZmVmCisjZGVmaW5lICAgQkNGRzFfVkFMVUUgMHgxMDAwNUQyRgorI2RlZmluZSAgIEJDRkcyX1ZBTFVFIDB4MTAwMDVEMkYKKy8qCisgKiBGb3IgUDAuMTggdG8gc2V0IFpaIHRvIHRoZSBTUkFNcyB0byAxLiBBbHNvIHNldCBQMC4yIChTQ0wpIGFuZCBQMC4zIChTREEpCisgKiBmb3IgdGhlIGJpdC1iYW5nZXIgSTJDIGRyaXZlciBjb3JyZWN0bHkuCisgKi8KKyNkZWZpbmUgICBJTzBfVkFMVUUgICAweDQwMDBDCisKK19URVhUX0JBU0U6CisJLndvcmQJVEVYVF9CQVNFCitNRU1NQVBfQURSOgorCS53b3JkCU1FTU1BUAorQkNGRzBfQURSOgorCS53b3JkIEJDRkcwCitfQkNGRzBfVkFMVUU6CisJLndvcmQgQkNGRzBfVkFMVUUKK0JDRkcxX0FEUjoKKwkud29yZAlCQ0ZHMQorX0JDRkcxX1ZBTFVFOgorCS53b3JkCUJDRkcxX1ZBTFVFCitCQ0ZHMl9BRFI6CisJLndvcmQJQkNGRzIKK19CQ0ZHMl9WQUxVRToKKwkud29yZAlCQ0ZHMl9WQUxVRQorSU8wRElSX0FEUjoKKwkud29yZAlJTzBESVIKK19JTzBESVJfVkFMVUU6CisJLndvcmQJSU8wX1ZBTFVFCitJTzBTRVRfQURSOgorCS53b3JkCUlPMFNFVAorX0lPMFNFVF9WQUxVRToKKwkud29yZAlJTzBfVkFMVUUKK1BJTlNFTDJfQURSOgorCS53b3JkCVBJTlNFTDIKK1BJTlNFTDJfTUFTSzoKKwkud29yZAkweDAwMDAwMDAwCitQSU5TRUwyX1ZBTFVFOgorCS53b3JkCTB4MEY4MDQ5MTQKKworLmV4dGVybiBfc3RhcnQKKworLmdsb2JsIGxvd2xldmVsX2luaXQKK2xvd2xldmVsX2luaXQ6CisJLyogc2V0IHVwIG1lbW9yeSBjb250cm9sIHJlZ2lzdGVyIGZvciBiYW5rIDAgKi8KKwlsZHIgcjAsIF9CQ0ZHMF9WQUxVRQorCWxkciByMSwgQkNGRzBfQURSCisJc3RyIHIwLCBbcjFdCisKKwkvKiBzZXQgdXAgbWVtb3J5IGNvbnRyb2wgcmVnaXN0ZXIgZm9yIGJhbmsgMSAqLworCWxkcglyMCwgX0JDRkcxX1ZBTFVFCisJbGRyCXIxLCBCQ0ZHMV9BRFIKKwlzdHIJcjAsIFtyMV0KKworCS8qIHNldCB1cCBtZW1vcnkgY29udHJvbCByZWdpc3RlciBmb3IgYmFuayAyICovCisJbGRyCXIwLCBfQkNGRzJfVkFMVUUKKwlsZHIJcjEsIEJDRkcyX0FEUgorCXN0cglyMCwgW3IxXQorCisJLyogc2V0IElPMERJUiB0byBtYWtlIFAwLjIsIFAwLjMgIGFuZCBQMC4xOCBvdXRwdXRzICovCisJbGRyCXIwLCBfSU8wRElSX1ZBTFVFCisJbGRyCXIxLCBJTzBESVJfQURSCisJc3RyCXIwLCBbcjFdCisKKwkvKiBzZXQgUDAuMTggdG8gMSAqLworCWxkcglyMCwgX0lPMFNFVF9WQUxVRQorCWxkcglyMSwgSU8wU0VUX0FEUgorCXN0cglyMCwgW3IxXQorCisJLyogc2V0IHVwIFBJTlNFTDIgZm9yIGJ1cy1waW5zICovCisJbGRyCXIwLCBQSU5TRUwyX0FEUgorCWxkcglyMSwgW3IwXQorCWxkcglyMiwgUElOU0VMMl9NQVNLCisJbGRyCXIzLCBQSU5TRUwyX1ZBTFVFCisJYW5kCXIxLCByMSwgcjIKKwlvcnIJcjEsIHIxLCByMworCXN0cglyMSwgW3IwXQorCisJLyogbW92ZSB2ZWN0b3JzIHRvIGJlZ2lubmluZyBvZiBTUkFNICovCisJbW92CXIyLCAjU1JBTV9TVEFSVAorCW1vdglyMCwgIzAgLypfc3RhcnQqLworCWxkbW5laWEgcjAhLCB7cjMtcjEwfQorCXN0bW5laWEgcjIhLCB7cjMtcjEwfQorCWxkbW5laWEgcjAsIHtyMy1yOX0KKwlzdG1uZWlhIHIyLCB7cjMtcjl9CisKKwkvKiBTZXQtdXAgTUVNTUFQIHJlZ2lzdGVyLCBzbyB2ZWN0b3JzIGFyZSB0YWtlbiBmcm9tIFNSQU0gKi8KKwlsZHIJcjAsIE1FTU1BUF9BRFIKKwltb3YJcjEsICMweDAyCS8qIHZlY3RvcnMgcmUtbWFwcGVkIHRvIHN0YXRpYyBSQU0gKi8KKwlzdHIJcjEsIFtyMF0KKworCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSBub3cgKi8KKwltb3YJcGMsIGxyCmRpZmYgLS1naXQgYS9ib2FyZC9zaWVtZW5zL1NNTjQyL3NtbjQyLmMgYi9ib2FyZC9zaWVtZW5zL1NNTjQyL3NtbjQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmYzc2YwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NpZW1lbnMvU01ONDIvc21uNDIuYwpAQCAtMCwwICsxLDYyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDUgUm93ZWwgQXRpZW56YSA8cm93ZWxAZGl3YWxhYnMuY29tPgorICogQXJtYWRpbGxvIGJvYXJkIEhUMTA3MAorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNyBHYXJ5IEplbm5lam9obiA8Z2FyeWpAZGVueC5kZT4KKyAqIFNpZW1lbnMgYm9hcmQgU01ONDIKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y2xwczcxMTEuaD4KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIHBsYXRmb3JtIGRlcGVuZGVudCBpbml0aWFsaXNhdGlvbnMKKyAqLworCitpbnQgYm9hcmRfaW5pdCAodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCS8qIGFyY2ggbnVtYmVyIE1BQ0hfVFlQRV9BUk1BRElMTE8gLSBub3Qgb2ZmaWNpYWwqLworCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSA4MzsKKworCS8qIGxvY2F0aW9uIG9mIGJvb3QgcGFyYW1ldGVycyAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBQSFlTX1NEUkFNXzEgKyAweDAwMDAwMTAwOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNXzE7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNXzFfU0laRTsKKworCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9zaWVtZW5zL1NNTjQyL3UtYm9vdC5sZHMgYi9ib2FyZC9zaWVtZW5zL1NNTjQyL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRkOTQ2YwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NpZW1lbnMvU01ONDIvdS1ib290LmxkcwpAQCAtMCwwICsxLDU1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAwCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgICAgICA6CisJeworCSAgY3B1L2FybTcyMHQvc3RhcnQubwkoLnRleHQpCisJICAqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL3N0eHNzYS9NYWtlZmlsZSBiL2JvYXJkL3N0eHNzYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDRlY2RmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc3R4c3NhL01ha2VmaWxlCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAxCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCisKK0NPQkpTCTo9ICQoQk9BUkQpLm8KK1NPQkpTCTo9IGluaXQubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykKKworY2xlYW46CisJcm0gLWYgJChPQkpTKSAkKFNPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvc3R4c3NhL2NvbmZpZy5tayBiL2JvYXJkL3N0eHNzYS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0ZmM3NDAKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zdHhzc2EvY29uZmlnLm1rCkBAIC0wLDAgKzEsMzMgQEAKKyMgTW9kaWZpZWQgYnkgWGlhbmdodWEgWGlhbywgWC5YaWFvQG1vdG9yb2xhLmNvbQorIyAoQykgQ29weXJpZ2h0IDIwMDIsMjAwMyBNb3Rvcm9sYSBJbmMuCisjCisjIENvcGllZCBmcm9tIEFEUzg1eHggZm9yIFNUeCBHUDMgLSBEYW4gTWFsZWsKKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIyBkZWZhdWx0IENDQVJCQVIgaXMgYXQgMHhmZjcwMDAwMAorIyBhc3N1bWUgVS1Cb290IGlzIGxlc3MgdGhhbiAwLjVNQgorIyBVLUJvb3QgaXMgbGVzcyB0aGFuIDI1NkssIHNvIHB1c2gKKyMgaXQgZnVydGhlciB1cCBpbnRvIHRoZSBmbGFzaAorIworVEVYVF9CQVNFID0gMHhGRkZDMDAwMAorCitQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19NUEM4NXh4PTEKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX0U1MDA9MQpkaWZmIC0tZ2l0IGEvYm9hcmQvc3R4c3NhL2luaXQuUyBiL2JvYXJkL3N0eHNzYS9pbml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhOGQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3N0eHNzYS9pbml0LlMKQEAgLTAsMCArMSwyNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRW1iZWRkZWQgQWxsZXkgU29sdXRpb25zLCBJbmMuCisgKiBEYW4gTWFsZWsgPGRhbkBlbWJlZGRlZGFsbGV5LmNvbT4KKyAqIENvcGllZCBmcm9tIFNUeCBHUDMuCisgKiBVcGRhdGVzIGZvciBTaWxpY29uIFR4IEdQMyBTU0EuICBXZSBvbmx5IHN1cHBvcnQgMzItYml0IGZsYXNoCisgKiBhbmQgRERSIHdpdGggU1BEIEVFUFJPTSBjb25maWd1cmF0aW9uLgorICoKKyAqIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICogQ29weXJpZ2h0IChDKSAyMDAyLDIwMDMsIE1vdG9yb2xhIEluYy4KKyAqIFhpYW5naHVhIFhpYW8gPFguWGlhb0Btb3Rvcm9sYS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPHBwY19hc20udG1wbD4KKyNpbmNsdWRlIDxwcGNfZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxtcGM4NXh4Lmg+CisKKworLyoKKyAqIFRMQjAgYW5kIFRMQjEgRW50cmllcworICoKKyAqIE91dCBvZiByZXNldCwgVExCMSdzIEVudHJ5IDAgbWFwcyB0aGUgaGlnaGVzdCA0SyBmb3IgQ0NTUkJBUi4KKyAqIEhvd2V2ZXIsIENDU1JCQVIgaXMgdGhlbiByZWxvY2F0ZWQgdG8gQ0ZHX0NDU1JCQVIgcmlnaHQgYWZ0ZXIKKyAqIHRoZXNlIFRMQiBlbnRyaWVzIGFyZSBlc3RhYmxpc2hlZC4KKyAqCisgKiBUaGUgVExCIGVudHJpZXMgZm9yIEREUiBhcmUgZHluYW1pY2FsbHkgc2V0dXAgaW4gc3BkX3NkcmFtKCkKKyAqIGFuZCB1c2UgVExCMSBFbnRyaWVzIDggdGhyb3VnaCAxNSBhcyBuZWVkZWQgYWNjb3JkaW5nIHRvIHRoZQorICogc2l6ZSBvZiBERFIgbWVtb3J5LgorICoKKyAqIE1BUzA6IHRsYnNlbCwgZXNlbCwgbnYKKyAqIE1BUzE6IHZhbGlkLCBpcHJvdCwgdGlkLCB0cywgdHNpemUKKyAqIE1BUzI6IGVwbiwgc2hhcmVuLCB4MCwgeDEsIHcsIGksIG0sIGcsIGUKKyAqIE1BUzM6IHJwbiwgdTAtdTMsIHV4LCBzeCwgdXcsIHN3LCB1ciwgc3IKKyAqLworCisjZGVmaW5lCWVudHJ5X3N0YXJ0IFwKKwltZmxyCXIxIAk7CVwKKwlibAkwZiAJOworCisjZGVmaW5lCWVudHJ5X2VuZCBcCiswOgltZmxyCXIwCTsJXAorCW10bHIJcjEJOwlcCisJYmxyCQk7CisKKworCS5zZWN0aW9uCS5ib290cGcsICJheCIKKwkuZ2xvYmwJdGxiMV9lbnRyeQordGxiMV9lbnRyeToKKwllbnRyeV9zdGFydAorCisJLyoKKwkgKiBOdW1iZXIgb2YgVExCMCBhbmQgVExCMSBlbnRyaWVzIGluIHRoZSBmb2xsb3dpbmcgdGFibGUKKwkgKi8KKwkubG9uZyAxMgorCisjaWYgKENGR19DQ1NSQkFSX0RFRkFVTFQgIT0gQ0ZHX0NDU1JCQVIpCisJLyoKKwkgKiBUTEIwCQk0SwlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHhmZjcwMDAwMAk0SwlJbml0aWFsIENDU1JCQVIgbWFwcGluZworCSAqCisJICogVGhpcyBlbmRzIHVwIGF0IGEgVExCMCBJbmRleD09MCBlbnRyeSwgYW5kIG11c3Qgbm90IGNvbGxpZGUKKwkgKiB3aXRoIG90aGVyIFRMQjAgRW50cmllcy4KKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMCwgMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19DQ1NSQkFSX0RFRkFVTFQpLCAwLDAsMCwwLDEsMCwxLDApCisJLmxvbmcgVExCMV9NQVMzKEU1MDBfVExCX1JQTihDRkdfQ0NTUkJBUl9ERUZBVUxUKSwgMCwwLDAsMCwwLDEsMCwxLDAsMSkKKyNlbHNlCisjZXJyb3IoIlVwZGF0ZSB0aGUgbnVtYmVyIG9mIHRhYmxlIGVudHJpZXMgaW4gdGxiMV9lbnRyeSIpCisjZW5kaWYKKworCS8qCisJICogVExCMAkJMTZLCUNhY2hlYWJsZSwgbm9uLWd1YXJkZWQKKwkgKiAweGQwMDFfMDAwMAkxNksJVGVtcG9yYXJ5IEdsb2JhbCBkYXRhIGZvciBpbml0aWFsaXphdGlvbgorCSAqCisJICogVXNlIGZvdXIgNEsgVExCMCBlbnRyaWVzLiAgVGhlc2UgZW50cmllcyBtdXN0IGJlIGNhY2hlYWJsZQorCSAqIGFzIHRoZXkgcHJvdmlkZSB0aGUgYm9vdHN0cmFwIG1lbW9yeSBiZWZvcmUgdGhlIG1lbW9yeQorCSAqIGNvbnRyb2xlciBhbmQgcmVhbCBtZW1vcnkgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQuCisJICoKKwkgKiBUaGVzZSBlbnRyaWVzIGVuZCB1cCBhdCBUTEIwIEluZGljaWVzIDB4MTAsIDB4MTQsIDB4MTggYW5kIDB4MWMsCisJICogYW5kIG11c3Qgbm90IGNvbGxpZGUgd2l0aCBvdGhlciBUTEIwIGVudHJpZXMuCisJICovCisJLmxvbmcgVExCMV9NQVMwKDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDAsIDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfSU5JVF9SQU1fQUREUiksIFwKKwkJCTAsMCwwLDAsMCwwLDAsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19JTklUX1JBTV9BRERSKSwgXAorCQkJMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS5sb25nIFRMQjFfTUFTMCgwLCAwLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAwLCAwLCAwLCAwKQorCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX0lOSVRfUkFNX0FERFIgKyA0ICogMTAyNCksIFwKKwkJCTAsMCwwLDAsMCwwLDAsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19JTklUX1JBTV9BRERSICsgNCAqIDEwMjQpLCBcCisJCQkwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLmxvbmcgVExCMV9NQVMwKDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDAsIDAsIDAsIDApCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfSU5JVF9SQU1fQUREUiArIDggKiAxMDI0KSwgXAorCQkJMCwwLDAsMCwwLDAsMCwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0lOSVRfUkFNX0FERFIgKyA4ICogMTAyNCksIFwKKwkJCTAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKwkubG9uZyBUTEIxX01BUzAoMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMCwgMCwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19JTklUX1JBTV9BRERSICsgMTIgKiAxMDI0KSwgXAorCQkJMCwwLDAsMCwwLDAsMCwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0lOSVRfUkFNX0FERFIgKyAxMiAqIDEwMjQpLCBcCisJCQkwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisKKwkvKgorCSAqIFRMQiAwOgk2NE0JTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqIDB4ZmMwMDAwMDAJNk00CUZMQVNICisJICogT3V0IG9mIHJlc2V0IHRoaXMgZW50cnkgaXMgb25seSA0Sy4KKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgMCwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzY0TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19GTEFTSF9CQVNFKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0ZMQVNIX0JBU0UpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEIgMToJMjU2TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHg4MDAwMDAwMAkyNTZNCVBDSTEgTUVNIEZpcnN0IGhhbGYKKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgMSwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzI1Nk0pCisJLmxvbmcgVExCMV9NQVMyKEU1MDBfVExCX0VQTihDRkdfUENJMV9NRU1fQkFTRSksIDAsMCwwLDAsMSwwLDEsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19QQ0kxX01FTV9CQVNFKSwgMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS8qCisJICogVExCIDI6CTI1Nk0JTm9uLWNhY2hlYWJsZSwgZ3VhcmRlZAorCSAqIDB4OTAwMDAwMDAJMjU2TQlQQ0kxIE1FTSBTZWNvbmQgaGFsZgorCSAqLworCS5sb25nIFRMQjFfTUFTMCgxLCAyLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfMjU2TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19QQ0kxX01FTV9CQVNFICsgMHgxMDAwMDAwMCksIFwKKwkJCTAsMCwwLDAsMSwwLDEsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19QQ0kxX01FTV9CQVNFICsgMHgxMDAwMDAwMCksIFwKKwkJCTAsMCwwLDAsMCwxLDAsMSwwLDEpCisKKwkvKgorCSAqIFRMQiAzOgkyNTZNCU5vbi1jYWNoZWFibGUsIGd1YXJkZWQKKwkgKiAweGEwMDAwMDAwCTI1Nk0JUENJMiBNRU0gRmlyc3QgaGFsZgorCSAqLworCS5sb25nIFRMQjFfTUFTMCgxLCAzLCAwKQorCS5sb25nIFRMQjFfTUFTMSgxLCAxLCAwLCAwLCBCT09LRV9QQUdFU1pfMjU2TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19QQ0kyX01FTV9CQVNFKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX1BDSTJfTUVNX0JBU0UpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEIgNDoJMjU2TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHhiMDAwMDAwMAkyNTZNCVBDSTIgTUVNIFNlY29uZCBoYWxmCisJICovCisJLmxvbmcgVExCMV9NQVMwKDEsIDQsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDEsIDAsIDAsIEJPT0tFX1BBR0VTWl8yNTZNKQorCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX1BDSTJfTUVNX0JBU0UgKyAweDEwMDAwMDAwKSwgXAorCQkJMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX1BDSTJfTUVNX0JBU0UgKyAweDEwMDAwMDAwKSwgXAorCQkJMCwwLDAsMCwwLDEsMCwxLDAsMSkKKworCS8qCisJICogVExCIDU6CTY0TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHhlMDAwXzAwMDAJMU0JQ0NTUkJBUgorCSAqIDB4ZTIwMF8wMDAwCTE2TQlQQ0kxIElPCisJICogMHhlMzAwXzAwMDAJMTZNCVBDSTIgSU8KKwkgKi8KKwkubG9uZyBUTEIxX01BUzAoMSwgNSwgMCkKKwkubG9uZyBUTEIxX01BUzEoMSwgMSwgMCwgMCwgQk9PS0VfUEFHRVNaXzY0TSkKKwkubG9uZyBUTEIxX01BUzIoRTUwMF9UTEJfRVBOKENGR19DQ1NSQkFSKSwgMCwwLDAsMCwxLDAsMSwwKQorCS5sb25nIFRMQjFfTUFTMyhFNTAwX1RMQl9SUE4oQ0ZHX0NDU1JCQVIpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCisJLyoKKwkgKiBUTEIgNjoJMjU2TQlOb24tY2FjaGVhYmxlLCBndWFyZGVkCisJICogMHhmMDAwMDAwMAkJTG9jYWwgYnVzIGV4cGFuc2lvbiBvcHRpb24uCisJICogMHhmYjAwMDAwMAkJQ29uZmlndXJhdGlvbiBMYXRjaCByZWdpc3RlciAob25lIHdvcmQpCisJICogMHhmYzAwMDAwMAkJVXAgdG8gNjRNIGZsYXNoCisJICovCisJLmxvbmcgVExCMV9NQVMwKDEsIDcsIDApCisJLmxvbmcgVExCMV9NQVMxKDEsIDEsIDAsIDAsIEJPT0tFX1BBR0VTWl8yNTZNKQorCS5sb25nIFRMQjFfTUFTMihFNTAwX1RMQl9FUE4oQ0ZHX0xCQ19PUFRJT05fQkFTRSksIDAsMCwwLDAsMSwwLDEsMCkKKwkubG9uZyBUTEIxX01BUzMoRTUwMF9UTEJfUlBOKENGR19MQkNfT1BUSU9OX0JBU0UpLCAwLDAsMCwwLDAsMSwwLDEsMCwxKQorCWVudHJ5X2VuZAorCisvKgorICogTEFXKExvY2FsIEFjY2VzcyBXaW5kb3cpIGNvbmZpZ3VyYXRpb246CisgKgorICogMHgwMDAwXzAwMDAgICAgIDB4N2ZmZl9mZmZmICAgICBERFIgICAgICAgICAgICAgICAgICAgICAyRworICogMHg4MDAwXzAwMDAgICAgIDB4OWZmZl9mZmZmICAgICBQQ0kxIE1FTSAgICAgICAgICAgICAgICA1MTJNCisgKiAweGEwMDBfMDAwMCAgICAgMHhiZmZmX2ZmZmYgICAgIFBDSTIgTUVNICAgICAgICAgICAgICAgIDUxMk0KKyAqIDB4ZTAwMF8wMDAwICAgICAweGUwMDBfZmZmZiAgICAgQ0NTUiAgICAgICAgICAgICAgICAgICAgMU0KKyAqIDB4ZTIwMF8wMDAwICAgICAweGUyZmZfZmZmZiAgICAgUENJMSBJTyAgICAgICAgICAgICAgICAgMTZNCisgKiAweGUzMDBfMDAwMCAgICAgMHhlM2ZmX2ZmZmYgICAgIFBDSTIgSU8gICAgICAgICAgICAgICAgIDE2TQorICogMHhmMDAwXzAwMDAgICAgIDB4ZmFmZl9mZmZmICAgICBMb2NhbCBidXMgICAgICAgICAgICAgICAxMjhNCisgKiAweGZiMDBfMDAwMCAgICAgMHhmYjAwX2ZmZmYgICAgIENvbmZpZyBMYXRjaCAgICAgICAgICAgIDY0SworICogMHhmYzAwXzAwMDAgICAgIDB4ZmZmZl9mZmZmICAgICBGTEFTSCAoYm9vdCBiYW5rKSAgICAgICA2NE0KKyAqCisgKiBOb3RlczoKKyAqICAgIENDU1JCQVIgYW5kIEwyLWFzLVNSQU0gZG9uJ3QgbmVlZCBhIGNvbmZpZ3VyZWQgTG9jYWwgQWNjZXNzIFdpbmRvdy4KKyAqICAgIElmIGZsYXNoIGlzIDhNIGF0IGRlZmF1bHQgcG9zaXRpb24gKGxhc3QgOE0pLCBubyBMQVcgbmVlZGVkLgorICovCisKKyNpZiAhZGVmaW5lZChDT05GSUdfU1BEX0VFUFJPTSkKKyNkZWZpbmUgTEFXQkFSMCAoKENGR19ERFJfU0RSQU1fQkFTRT4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVIwCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfRERSIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzEyOE0pKQorI2Vsc2UKKyNkZWZpbmUgTEFXQkFSMCAwCisjZGVmaW5lIExBV0FSMCAgKChMQVdBUl9UUkdUX0lGX0REUiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xMjhNKSkgJiB+TEFXQVJfRU4pCisjZW5kaWYKKworI2RlZmluZSBMQVdCQVIxICgoQ0ZHX1BDSTFfTUVNX0JBU0U+PjEyKSAmIDB4ZmZmZmYpCisjZGVmaW5lIExBV0FSMSAJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0kxIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pKQorCisjZGVmaW5lIExBV0JBUjIgKChDRkdfUENJMl9NRU1fQkFTRT4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVIyIAkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTIgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNTEyTSkpCisKKyNkZWZpbmUgTEFXQkFSMyAoKENGR19QQ0kxX0lPX1BIWVM+PjEyKSAmIDB4ZmZmZmYpCisjZGVmaW5lIExBV0FSMyAJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0kxIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzE2TSkpCisKKyNkZWZpbmUgTEFXQkFSNCAoKENGR19QQ0kyX0lPX1BIWVM+PjEyKSAmIDB4ZmZmZmYpCisjZGVmaW5lIExBV0FSNCAJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0kyIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzE2TSkpCisKKy8qIE1hcCB0aGUgd2hvbGUgbG9jYWxidXMsIGluY2x1ZGluZyBmbGFzaCBhbmQgcmVzZXQgbGF0Y2guCisqLworI2RlZmluZSBMQVdCQVI1ICgoQ0ZHX0xCQ19PUFRJT05fQkFTRT4+MTIpICYgMHhmZmZmZikKKyNkZWZpbmUgTEFXQVI1CShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfTEJDIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzI1Nk0pKQorCisKKwkuc2VjdGlvbiAuYm9vdHBnLCAiYXgiCisJLmdsb2JsCWxhd19lbnRyeQorbGF3X2VudHJ5OgorCWVudHJ5X3N0YXJ0CisJLmxvbmcgNgorCS5sb25nIExBV0JBUjAsTEFXQVIwLExBV0JBUjEsTEFXQVIxLExBV0JBUjIsTEFXQVIyLExBV0JBUjMsTEFXQVIzCisJLmxvbmcgTEFXQkFSNCxMQVdBUjQsTEFXQkFSNSxMQVdBUjUKKwllbnRyeV9lbmQKZGlmZiAtLWdpdCBhL2JvYXJkL3N0eHNzYS9zdHhzc2EuYyBiL2JvYXJkL3N0eHNzYS9zdHhzc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmIyMzNkCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc3R4c3NhL3N0eHNzYS5jCkBAIC0wLDAgKzEsMzk4IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA1LCBFbWJlZGRlZCBBbGxleSBTb2x1dGlvbnMsIEluYy4KKyAqIERhbiBNYWxlaywgPGRhbkBlbWJlZGRlZGFsbGV5LmNvbT4KKyAqIENvcGllZCBmcm9tIFNUeCBHUDMuCisgKiBVcGRhdGVzIGZvciBTaWxpY29uIFR4IEdQMyBTU0EKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDMsTW90b3JvbGEgSW5jLgorICogWGlhbmdodWEgWGlhbywgKFguWGlhb0Btb3Rvcm9sYS5jb20pCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyIFNjb3R0IE1jTnV0dCA8c21jbnV0dEBhcnRlc3luY3AuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworZXh0ZXJuIGxvbmcgaW50IHNwZF9zZHJhbSAodm9pZCk7CisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxwY2kuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2ltbWFwXzg1eHguaD4KKyNpbmNsdWRlIDxpb3BvcnRzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8c3BkLmg+CisjaW5jbHVkZSA8bWlpcGh5Lmg+CisKK2xvbmcgaW50IGZpeGVkX3NkcmFtICh2b2lkKTsKKworLyoKKyAqIEkvTyBQb3J0IGNvbmZpZ3VyYXRpb24gdGFibGUKKyAqCisgKiBpZiBjb25mIGlzIDEsIHRoZW4gdGhhdCBwb3J0IHBpbiB3aWxsIGJlIGNvbmZpZ3VyZWQgYXQgYm9vdCB0aW1lCisgKiBhY2NvcmRpbmcgdG8gdGhlIGZpdmUgdmFsdWVzIHBvZHIvcGRpci9wcGFyL3Bzb3IvcGRhdCBmb3IgdGhhdCBlbnRyeQorICovCisKK2NvbnN0IGlvcF9jb25mX3QgaW9wX2NvbmZfdGFiWzRdWzMyXSA9IHsKKworICAgIC8qIFBvcnQgQSBjb25maWd1cmF0aW9uICovCisgICAgeyAgIC8qICAgICAgICAgICAgY29uZiBwcGFyIHBzb3IgcGRpciBwb2RyIHBkYXQgKi8KKwkvKiBQQTMxICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgVHhFTkIgKi8KKwkvKiBQQTMwICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgVHhDbGF2ICAgKi8KKwkvKiBQQTI5ICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgVHhTT0MgICovCisJLyogUEEyOCAqLyB7ICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIFJ4RU5CICovCisJLyogUEEyNyAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIFJ4U09DICovCisJLyogUEEyNiAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIFJ4Q2xhdiAqLworCS8qIFBBMjUgKi8geyAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1UWERbMF0gKi8KKwkvKiBQQTI0ICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNVFhEWzFdICovCisJLyogUEEyMyAqLyB7ICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVRYRFsyXSAqLworCS8qIFBBMjIgKi8geyAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1UWERbM10gKi8KKwkvKiBQQTIxICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNVFhEWzRdICovCisJLyogUEEyMCAqLyB7ICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVRYRFs1XSAqLworCS8qIFBBMTkgKi8geyAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1UWERbNl0gKi8KKwkvKiBQQTE4ICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNVFhEWzddICovCisJLyogUEExNyAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVJYRFs3XSAqLworCS8qIFBBMTYgKi8geyAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1SWERbNl0gKi8KKwkvKiBQQTE1ICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNUlhEWzVdICovCisJLyogUEExNCAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVJYRFs0XSAqLworCS8qIFBBMTMgKi8geyAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1SWERbM10gKi8KKwkvKiBQQTEyICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNUlhEWzJdICovCisJLyogUEExMSAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVJYRFsxXSAqLworCS8qIFBBMTAgKi8geyAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1SWERbMF0gKi8KKwkvKiBQQTkgICovIHsgICAwLCAgIDEsICAgMSwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgTDFUWEQgKi8KKwkvKiBQQTggICovIHsgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgTDFSWEQgKi8KKwkvKiBQQTcgICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBBNyAqLworCS8qIFBBNiAgKi8geyAgIDAsICAgMSwgICAxLCAgIDEsICAgMCwgICAwICAgfSwgLyogVERNIEExIEwxUlNZTkMgKi8KKwkvKiBQQTUgICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBBNSAqLworCS8qIFBBNCAgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEE0ICovCisJLyogUEEzICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBQQTMgKi8KKwkvKiBQQTIgICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBBMiAqLworCS8qIFBBMSAgKi8geyAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRlJFRVJVTiAqLworCS8qIFBBMCAgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSAgLyogUEEwICovCisgICAgfSwKKworICAgIC8qIFBvcnQgQiBjb25maWd1cmF0aW9uICovCisgICAgeyAgIC8qICAgICAgICAgICAgY29uZiBwcGFyIHBzb3IgcGRpciBwb2RyIHBkYXQgKi8KKwkvKiBQQjMxICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFRYX0VSICovCisJLyogUEIzMCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBSWF9EViAqLworCS8qIFBCMjkgKi8geyAgIDEsICAgMSwgICAxLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgVFhfRU4gKi8KKwkvKiBQQjI4ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFJYX0VSICovCisJLyogUEIyNyAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBDT0wgKi8KKwkvKiBQQjI2ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIENSUyAqLworCS8qIFBCMjUgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgVHhEWzNdICovCisJLyogUEIyNCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBUeERbMl0gKi8KKwkvKiBQQjIzICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFR4RFsxXSAqLworCS8qIFBCMjIgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgVHhEWzBdICovCisJLyogUEIyMSAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBSeERbMF0gKi8KKwkvKiBQQjIwICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzIgTUlJIFJ4RFsxXSAqLworCS8qIFBCMTkgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMiBNSUkgUnhEWzJdICovCisJLyogUEIxOCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBSeERbM10gKi8KKwkvKiBQQjE3ICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzM6UlhfRElWICovCisJLyogUEIxNiAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzOlJYX0VSUiAqLworCS8qIFBCMTUgKi8geyAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMzpUWF9FUlIgKi8KKwkvKiBQQjE0ICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzM6VFhfRU4gKi8KKwkvKiBQQjEzICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzM6Q09MICovCisJLyogUEIxMiAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzOkNSUyAqLworCS8qIFBCMTEgKi8geyAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMzpSWEQgKi8KKwkvKiBQQjEwICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzM6UlhEICovCisJLyogUEI5ICAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzOlJYRCAqLworCS8qIFBCOCAgKi8geyAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMzpSWEQgKi8KKwkvKiBQQjcgICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzM6VFhEICovCisJLyogUEI2ICAqLyB7ICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MzOlRYRCAqLworCS8qIFBCNSAgKi8geyAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMzpUWEQgKi8KKwkvKiBQQjQgICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzM6VFhEICovCisJLyogUEIzICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBwaW4gZG9lc24ndCBleGlzdCAqLworCS8qIFBCMiAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogcGluIGRvZXNuJ3QgZXhpc3QgKi8KKwkvKiBQQjEgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIHBpbiBkb2Vzbid0IGV4aXN0ICovCisJLyogUEIwICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9ICAvKiBwaW4gZG9lc24ndCBleGlzdCAqLworICAgIH0sCisKKyAgICAvKiBQb3J0IEMgKi8KKyAgICB7ICAgLyogICAgICAgICAgICBjb25mIHBwYXIgcHNvciBwZGlyIHBvZHIgcGRhdCAqLworCS8qIFBDMzEgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEMzMSAqLworCS8qIFBDMzAgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEMzMCAqLworCS8qIFBDMjkgKi8geyAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAwICAgfSwgLyogU0NDMSBFTiAqQ0xTTiAqLworCS8qIFBDMjggKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEMyOCAqLworCS8qIFBDMjcgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogVUFSVCBDbG9jayBpbiAqLworCS8qIFBDMjYgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEMyNiAqLworCS8qIFBDMjUgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEMyNSAqLworCS8qIFBDMjQgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEMyNCAqLworCS8qIFBDMjMgKi8geyAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogQVRNVEZDTEsgKi8KKwkvKiBQQzIyICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEFUTVJGQ0xLICovCisJLyogUEMyMSAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBTQ0MxIEVOIFJYQ0xLICovCisJLyogUEMyMCAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBTQ0MxIEVOIFRYQ0xLICovCisJLyogUEMxOSAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MyIE1JSSBSWF9DTEsgQ0xLMTMgKi8KKwkvKiBQQzE4ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQyBUeCBDbG9jayAoQ0xLMTQpICovCisJLyogUEMxNyAqLyB7ICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBQQzE3ICovCisJLyogUEMxNiAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MgVHggQ2xvY2sgKENMSzE2KSAqLworCS8qIFBDMTUgKi8geyAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEMxNSAqLworCS8qIFBDMTQgKi8geyAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogU0NDMSBFTiAqQ0QgKi8KKwkvKiBQQzEzICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBDMTMgKi8KKwkvKiBQQzEyICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBDMTIgKi8KKwkvKiBQQzExICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIExYVDk3MSB0cmFuc21pdCBjb250cm9sICovCisJLyogUEMxMCAqLyB7ICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGRVRITURDICovCisJLyogUEM5ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGRVRITURJTyAqLworCS8qIFBDOCAgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEM4ICovCisJLyogUEM3ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBQQzcgKi8KKwkvKiBQQzYgICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBDNiAqLworCS8qIFBDNSAgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogUEM1ICovCisJLyogUEM0ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBQQzQgKi8KKwkvKiBQQzMgICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBDMyAqLworCS8qIFBDMiAgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAxICAgfSwgLyogRU5FVCBGREUgKi8KKwkvKiBQQzEgICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEVORVQgRFNRRSAqLworCS8qIFBDMCAgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRU5FVCBMQksgKi8KKyAgICB9LAorCisgICAgLyogUG9ydCBEICovCisgICAgeyAgIC8qICAgICAgICAgICAgY29uZiBwcGFyIHBzb3IgcGRpciBwb2RyIHBkYXQgKi8KKwkvKiBQRDMxICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFNDQzEgRU4gUnhEICovCisJLyogUEQzMCAqLyB7ICAgMCwgICAxLCAgIDEsICAgMSwgICAwLCAgIDAgICB9LCAvKiBTQ0MxIEVOIFR4RCAqLworCS8qIFBEMjkgKi8geyAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogU0NDMSBFTiBURU5BICovCisJLyogUEQyOCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBTQ0MyIFJ4RCAqLworCS8qIFBEMjcgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogU0NDMiBUeEQgKi8KKwkvKiBQRDI2ICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBEMjYgKi8KKwkvKiBQRDI1ICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBEMjUgKi8KKwkvKiBQRDI0ICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBEMjQgKi8KKwkvKiBQRDIzICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBEMjMgKi8KKwkvKiBQRDIyICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBEMjIgKi8KKwkvKiBQRDIxICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBEMjEgKi8KKwkvKiBQRDIwICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBEMjAgKi8KKwkvKiBQRDE5ICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBEMTkgKi8KKwkvKiBQRDE4ICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFBEMTggKi8KKwkvKiBQRDE3ICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNUlhQUlRZICovCisJLyogUEQxNiAqLyB7ICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIEFUTVRYUFJUWSAqLworCS8qIFBEMTUgKi8geyAgIDEsICAgMSwgICAxLCAgIDAsICAgMSwgICAwICAgfSwgLyogSTJDIFNEQSAqLworCS8qIFBEMTQgKi8geyAgIDEsICAgMSwgICAxLCAgIDAsICAgMCwgICAwICAgfSwgLyogSTJDIENMSyAqLworCS8qIFBEMTMgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEQxMyAqLworCS8qIFBEMTIgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEQxMiAqLworCS8qIFBEMTEgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEQxMSAqLworCS8qIFBEMTAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogUEQxMCAqLworCS8qIFBEOSAgKi8geyAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogU01DMSBUWEQgKi8KKwkvKiBQRDggICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFNNQzEgUlhEICovCisJLyogUEQ3ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDEgICB9LCAvKiBQRDcgKi8KKwkvKiBQRDYgICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMSAgIH0sIC8qIFBENiAqLworCS8qIFBENSAgKi8geyAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAxICAgfSwgLyogUEQ1ICovCisJLyogUEQ0ICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDEgICB9LCAvKiBQRDQgKi8KKwkvKiBQRDMgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIHBpbiBkb2Vzbid0IGV4aXN0ICovCisJLyogUEQyICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBwaW4gZG9lc24ndCBleGlzdCAqLworCS8qIFBEMSAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogcGluIGRvZXNuJ3QgZXhpc3QgKi8KKwkvKiBQRDAgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0gIC8qIHBpbiBkb2Vzbid0IGV4aXN0ICovCisgICAgfQorfTsKKworc3RhdGljCXVpbnQ2NF90CW5leHRfbGVkX3VwZGF0ZTsKK3N0YXRpYwl1aW50CQlsZWRfYml0OworCit2b2lkCityZXNldF9waHkodm9pZCkKK3sKKwl2b2xhdGlsZSB1aW50ICpibGF0Y2g7CisjaWYgMAorCWludAlpOworI2VuZGlmCisJYmxhdGNoID0gKHZvbGF0aWxlIHVpbnQgKilDRkdfTEJDX0NGR0xBVENIX0JBU0U7CisKKwkvKiByZXNldCBHaWdhIGJpdCBFdGhlcm5ldCBwb3J0IGlmIG5lZWRlZCBoZXJlICovCisKKyNpZiAxCisJKmJsYXRjaCAmPSB+MHgwMDAwMDBjMDsKKwl1ZGVsYXkoMTAwKTsKKyNlbHNlCisJKmJsYXRjaCA9IDA7CisJYXNtKCJlaWVpbyIpOworCWZvciAoaT0wOyBpPDEwMDA7IGkrKykKKwkJdWRlbGF5KDEwMDApOworI2VuZGlmCisJKmJsYXRjaCA9IDB4MDAwMDAwYzE7CS8qIExpZ2h0IG9uZSBsZWQsIHRvbyAqLworCXVkZWxheSgxMDAwKTsKKworI2lmIDAJLyogVGhpcyBpcyB0aGUgcG9ydCB3ZSByZWFsbHkgd2FudCB0byB1c2UgZm9yIGRlYnVnZ2luZy4gKi8KKwkvKiByZXNldCB0aGUgQ1BNIEZFQyBwb3J0ICovCisjaWYgKENPTkZJR19FVEhFUl9JTkRFWCA9PSAyKQorCWJjc3ItPmJjc3IyICY9IH5GRVRIMl9SU1Q7CisJdWRlbGF5KDIpOworCWJjc3ItPmJjc3IyIHw9ICBGRVRIMl9SU1Q7CisJdWRlbGF5KDEwMDApOworI2VsaWYgKENPTkZJR19FVEhFUl9JTkRFWCA9PSAzKQorCWJjc3ItPmJjc3IzICY9IH5GRVRIM19SU1Q7CisJdWRlbGF5KDIpOworCWJjc3ItPmJjc3IzIHw9ICBGRVRIM19SU1Q7CisJdWRlbGF5KDEwMDApOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTUlJKSAmJiBkZWZpbmVkKENPTkZJR19FVEhFUl9PTl9GQ0MpCisJLyogcmVzZXQgUEhZICovCisJbWlpcGh5X3Jlc2V0KCJGQ0MxIEVUSEVSTkVUIiwgMHgwKTsKKworCS8qIGNoYW5nZSBQSFkgYWRkcmVzcyB0byAweDAyICovCisJYmJfbWlpcGh5X3dyaXRlKE5VTEwsIDAsIFBIWV9NSVBTQ1IsIDB4ZjAyOCk7CisKKwliYl9taWlwaHlfd3JpdGUoTlVMTCwgMHgwMiwgUEhZX0JNQ1IsCisJCQlQSFlfQk1DUl9BVVRPTiB8IFBIWV9CTUNSX1JTVF9ORUcpOworI2VuZGlmIC8qIENPTkZJR19NSUkgKi8KKyNlbmRpZgorfQorCitpbnQKK2JvYXJkX2Vhcmx5X2luaXRfZih2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKyAgICB2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKyAgICB2b2xhdGlsZSBjY3NyX3BjaXhfdCAqcGNpID0gJmltbXItPmltX3BjaXg7CisKKyAgICBwY2ktPnBlZXIgJj0gMHhmZmZmZmZmZGY7IC8qIGRpc2FibGUgbWFzdGVyIGFib3J0ICovCisjZW5kaWYKKworCS8qIFdoeSBpcyB0aGUgcGh5IHJlc2V0IGRvbmUgX2FmdGVyXyB0aGUgZXRoZXJuZXQKKwkgKiBpbml0aWFsaXphdGlvbiBpbiBsaWJfcHBjL2JvYXJkLmM/CisJICogRG8gaXQgaGVyZSBzbyBpdCdzIGRvbmUgYmVmb3JlIHRoZSBUU0VDcyBhcmUgdXNlZC4KKwkgKi8KKwlyZXNldF9waHkoKTsKKworCXJldHVybiAwOworfQorCitpbnQKK2NoZWNrYm9hcmQodm9pZCkKK3sKKwlwcmludGYgKCJCb2FyZDogU2lsaWNvbiBUeCBHUFBQIFNTQSBCb2FyZFxuIik7CisJcmV0dXJuICgwKTsKK30KKworLyogQmxpbmtpbicgTEVEUyBmb3IgUm9iZXJ0LgorKi8KK3ZvaWQKK3Nob3dfYWN0aXZpdHkoaW50IGZsYWcpCit7CisJdm9sYXRpbGUgdWludCAqYmxhdGNoOworCisJaWYgKG5leHRfbGVkX3VwZGF0ZSA+IGdldF90aWNrcygpKQorCQlyZXR1cm47CisKKwlibGF0Y2ggPSAodm9sYXRpbGUgdWludCAqKUNGR19MQkNfQ0ZHTEFUQ0hfQkFTRTsKKworCWxlZF9iaXQgPj49IDE7CisJaWYgKGxlZF9iaXQgPT0gMCkKKwkJbGVkX2JpdCA9IDB4MDg7CisJKmJsYXRjaCA9ICgweGMwIHwgbGVkX2JpdCk7CisJZWllaW8oKTsKKwluZXh0X2xlZF91cGRhdGUgKz0gKGdldF90YmNsaygpIC8gNCk7Cit9CisKK2xvbmcgaW50Citpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCit7CisJbG9uZyBkcmFtX3NpemUgPSAwOworCWV4dGVybiBsb25nIHNwZF9zZHJhbSAodm9pZCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19ERFJfRExMKQorCXsKKwkJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXI9ICZpbW1hcC0+aW1fZ3VyOworCQl1aW50IHRlbXBfZGRyZGxsID0gMDsKKworCQkvKiBXb3JrIGFyb3VuZCB0byBzdGFiaWxpemUgRERSIERMTCAqLworCQl0ZW1wX2RkcmRsbCA9IGd1ci0+ZGRyZGxsY3I7CisJCWd1ci0+ZGRyZGxsY3IgPSAoKHRlbXBfZGRyZGxsICYgMHhmZikgPDwgMTYpIHwgMHg4MDAwMDAwMDsKKwkJYXNtKCJzeW5jO2lzeW5jO21zeW5jIik7CisJfQorI2VuZGlmCisKKwlkcmFtX3NpemUgPSBzcGRfc2RyYW0gKCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKQorCS8qIEluaXRpYWxpemUgYW5kIGVuYWJsZSBERFIgRUNDLgorCSovCisJZGRyX2VuYWJsZV9lY2MoZHJhbV9zaXplKTsKKyNlbmRpZgorCisJcmV0dXJuIGRyYW1fc2l6ZTsKK30KKworCisjaWYgZGVmaW5lZChDRkdfRFJBTV9URVNUKQoraW50IHRlc3RkcmFtICh2b2lkKQoreworCXVpbnQgKnBzdGFydCA9ICh1aW50ICopIENGR19NRU1URVNUX1NUQVJUOworCXVpbnQgKnBlbmQgPSAodWludCAqKSBDRkdfTUVNVEVTVF9FTkQ7CisJdWludCAqcDsKKworCXByaW50ZigiU0RSQU0gdGVzdCBwaGFzZSAxOlxuIik7CisJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKQorCQkqcCA9IDB4YWFhYWFhYWE7CisKKwlmb3IgKHAgPSBwc3RhcnQ7IHAgPCBwZW5kOyBwKyspIHsKKwkJaWYgKCpwICE9IDB4YWFhYWFhYWEpIHsKKwkJCXByaW50ZiAoIlNEUkFNIHRlc3QgZmFpbHMgYXQ6ICUwOHhcbiIsICh1aW50KSBwKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcHJpbnRmKCJTRFJBTSB0ZXN0IHBoYXNlIDI6XG4iKTsKKwlmb3IgKHAgPSBwc3RhcnQ7IHAgPCBwZW5kOyBwKyspCisJCSpwID0gMHg1NTU1NTU1NTsKKworCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykgeworCQlpZiAoKnAgIT0gMHg1NTU1NTU1NSkgeworCQkJcHJpbnRmICgiU0RSQU0gdGVzdCBmYWlscyBhdDogJTA4eFxuIiwgKHVpbnQpIHApOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlwcmludGYoIlNEUkFNIHRlc3QgcGFzc2VkLlxuIik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKworLyoKKyAqIEluaXRpYWxpemUgUENJIERldmljZXMsIHJlcG9ydCBkZXZpY2VzIGZvdW5kLgorICovCisKKyNpZm5kZWYgQ09ORklHX1BDSV9QTlAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbmZpZ190YWJsZSBwY2lfc3R4Z3AzX2NvbmZpZ190YWJsZVtdID0geworICAgIHsgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKyAgICAgIFBDSV9JRFNFTF9OVU1CRVIsIFBDSV9BTllfSUQsCisgICAgICBwY2lfY2ZnZnVuY19jb25maWdfZGV2aWNlLCB7IFBDSV9FTkVUMF9JT0FERFIsCisJCQkJICAgUENJX0VORVQwX01FTUFERFIsCisJCQkJICAgUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSCisgICAgICB9IH0sCisgICAgeyB9Cit9OworI2VuZGlmCisKKworc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBob3NlID0geworI2lmbmRlZiBDT05GSUdfUENJX1BOUAorCWNvbmZpZ190YWJsZTogcGNpX3N0eGdwM19jb25maWdfdGFibGUsCisjZW5kaWYKK307CisKKyNlbmRpZgkvKiBDT05GSUdfUENJICovCisKKwordm9pZAorcGNpX2luaXRfYm9hcmQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUENJCisJZXh0ZXJuIHZvaWQgcGNpX21wYzg1eHhfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOworCisJcGNpX21wYzg1eHhfaW5pdCgmaG9zZSk7CisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvc3R4c3NhL3UtYm9vdC5sZHMgYi9ib2FyZC9zdHhzc2EvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWVjZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc3R4c3NhL3UtYm9vdC5sZHMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDUgRW1iZWRkZWQgQWxsZXkgU29sdXRpb25zLCBJbmMuCisgKiBEYW4gTWFsZWssIDxkYW5AZW1iZWRkZWRhbGxleS5jb20+CisgKiBDb3BpZWQgZnJvbSBTVHggR1AzLgorICogVXBkYXRlcyBmb3IgU2lsaWNvbiBUeCBHUDMgU1NBLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMiwyMDAzLE1vdG9yb2xhLEluYy4KKyAqIFhpYW5naHVhIFhpYW8sIFguWGlhb0Btb3Rvcm9sYS5jb20uCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0FSQ0gocG93ZXJwYykKK1NFQVJDSF9ESVIoL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL3Bvd2VycGMtYW55LWVsZi9saWIpOworLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KKyAgIF9fRFlOQU1JQyA9IDA7ICAgICovCitTRUNUSU9OUworeworICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6CisgIHsKKyAgICAqKC5yZXNldHZlYykKKyAgfSA9IDB4ZmZmZgorCisgIC5ib290cGcgMHhGRkZGRjAwMCA6CisgIHsKKyAgICBjcHUvbXBjODV4eC9zdGFydC5vCSguYm9vdHBnKQorICAgIGJvYXJkL3N0eHNzYS9pbml0Lm8gKC5ib290cGcpCisgIH0gPSAweGZmZmYKKworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9ICsgU0laRU9GX0hFQURFUlM7CisgIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQorICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KKyAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KKyAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KKyAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQorICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KSAJfQorICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9CisgIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpIAl9CisgIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKSAJfQorICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpIAl9CisgIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQorICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9CisgIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KKyAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KKyAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQorICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQorICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KKyAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQorICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KKyAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQorICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQorICAucGx0IDogeyAqKC5wbHQpIH0KKyAgLnRleHQgICAgICA6CisgIHsKKyAgICBjcHUvbXBjODV4eC9zdGFydC5vCSgudGV4dCkKKyAgICBib2FyZC9zdHhzc2EvaW5pdC5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9jb21tcHJvYy5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC90cmFwcy5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9pbnRlcnJ1cHRzLm8gKC50ZXh0KQorICAgIGNwdS9tcGM4NXh4L3NlcmlhbF9zY2MubyAoLnRleHQpCisgICAgY3B1L21wYzg1eHgvZXRoZXJfZmNjLm8gKC50ZXh0KQorICAgIGNwdS9tcGM4NXh4L2NwdV9pbml0Lm8gKC50ZXh0KQorICAgIGNwdS9tcGM4NXh4L2NwdS5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9zcGVlZC5vICgudGV4dCkKKyAgICBjcHUvbXBjODV4eC9zcGRfc2RyYW0ubyAoLnRleHQpCisgICAgY29tbW9uL2RsbWFsbG9jLm8gKC50ZXh0KQorICAgIGxpYl9nZW5lcmljL2NyYzMyLm8gKC50ZXh0KQorICAgIGxpYl9wcGMvZXh0YWJsZS5vICgudGV4dCkKKyAgICBsaWJfZ2VuZXJpYy96bGliLm8gKC50ZXh0KQorICAgICooLnRleHQpCisgICAgKiguZml4dXApCisgICAgKiguZ290MSkKKyAgIH0KKyAgICBfZXRleHQgPSAuOworICAgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgICAgLnJvZGF0YSAgICA6CisgICB7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgICAqKC5laF9mcmFtZSkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMjsKKyAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKSA+PiAyOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIC4gPSAuOworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworICAuID0gLjsKKyAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CisgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKworICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2VuZCA9IC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykgKiguc2NvbW1vbikKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICB9CisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC90cW01MjAwL3RxbTUyMDAuYyBiL2JvYXJkL3RxbTUyMDAvdHFtNTIwMC5jCmluZGV4IGE0MzIyYjYuLmNmOTc2MDMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RxbTUyMDAvdHFtNTIwMC5jCisrKyBiL2JvYXJkL3RxbTUyMDAvdHFtNTIwMC5jCkBAIC0zMiw2ICszMiwxMCBAQAogI2luY2x1ZGUgPHBjaS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAorI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkKKyNpbmNsdWRlIDxmdF9idWlsZC5oPgorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfVklERU9fU001MDEKICNpbmNsdWRlIDxzbTUwMS5oPgogI2VuZGlmCkBAIC03NzUsMyArNzc5LDEwIEBACiB9CiAKICNlbmRpZiAvKiBDT05GSUdfVklERU9fU001MDEgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCit2b2lkIGZ0X2JvYXJkX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCWZ0X2NwdV9zZXR1cChibG9iLCBiZCk7Cit9CisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3hpbGlueC9tbDQwMS9jb25maWcubWsgYi9ib2FyZC94aWxpbngvbWw0MDEvY29uZmlnLm1rCmluZGV4IDgwN2YxNjkuLmM3NWRhYWYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3hpbGlueC9tbDQwMS9jb25maWcubWsKKysrIGIvYm9hcmQveGlsaW54L21sNDAxL2NvbmZpZy5tawpAQCAtMjUsNyArMjUsNyBAQAogIyBWZXJzaW9uOiBYaWxpbnggRURLIDYuMyBFREtfR21tLjEyLjMKICMKIAotVEVYVF9CQVNFID0gMHgxMjAwMDAwMAorVEVYVF9CQVNFID0gMHgyOTAwMDAwMAogCiBQTEFURk9STV9DUFBGTEFHUyArPSAtbW5vLXhsLXNvZnQtbXVsCiBQTEFURk9STV9DUFBGTEFHUyArPSAtbW5vLXhsLXNvZnQtZGl2CmRpZmYgLS1naXQgYS9ib2FyZC94aWxpbngvbWw0MDEvbWw0MDEuYyBiL2JvYXJkL3hpbGlueC9tbDQwMS9tbDQwMS5jCmluZGV4IGI0ODEwM2YuLjk1NTkzNmQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3hpbGlueC9tbDQwMS9tbDQwMS5jCisrKyBiL2JvYXJkL3hpbGlueC9tbDQwMS9tbDQwMS5jCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbWljcm9ibGF6ZV9pbnRjLmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgogCiB2b2lkIGRvX3Jlc2V0ICh2b2lkKQogewpAQCAtNDMsNyArNDUsMjUgQEAKIGludCBncGlvX2luaXQgKHZvaWQpCiB7CiAjaWZkZWYgQ0ZHX0dQSU9fMAotCSooKHVuc2lnbmVkIGxvbmcgKikoQ0ZHX0dQSU9fMF9BRERSKSkgPSAweDA7CisJKigodW5zaWduZWQgbG9uZyAqKShDRkdfR1BJT18wX0FERFIpKSA9IDB4RkZGRkZGRkY7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KKworI2lmZGVmIENGR19GU0xfMgordm9pZCBmc2xfaXNyMiAodm9pZCAqYXJnKSB7CisJdm9sYXRpbGUgaW50IG51bTsKKwkqKCh1bnNpZ25lZCBpbnQgKikoQ0ZHX0dQSU9fMF9BRERSICsgMHg0KSkgPQorCSAgICArKygqKCh1bnNpZ25lZCBpbnQgKikoQ0ZHX0dQSU9fMF9BRERSICsgMHg0KSkpOworCUdFVCAobnVtLCAyKTsKKwlOR0VUIChudW0sIDIpOworCXB1dHMoIioiKTsKK30KKwordm9pZCBmc2xfaW5pdDIgKHZvaWQpIHsKKwlwdXRzKCJmc2xfaW5pdDJcbiIpOworCWluc3RhbGxfaW50ZXJydXB0X2hhbmRsZXIgKEZTTF9JTlRSXzIsXAorIGZzbF9pc3IyLFwKKyBOVUxMKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQveGlsaW54L21sNDAxL3hwYXJhbWV0ZXJzLmggYi9ib2FyZC94aWxpbngvbWw0MDEveHBhcmFtZXRlcnMuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDE4ZDI0ZjkuLjFhMTE2ZWEKLS0tIGEvYm9hcmQveGlsaW54L21sNDAxL3hwYXJhbWV0ZXJzLmgKKysrIGIvYm9hcmQveGlsaW54L21sNDAxL3hwYXJhbWV0ZXJzLmgKQEAgLTIxLDQ3ICsyMSw1NSBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICAqIE1BIDAyMTExLTEzMDcgVVNBCiAgKgotICoKICAqIENBVVRJT046IFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBsaWJnZW4uCi0gKiBWZXJzaW9uOiBYaWxpbnggRURLIDYuMyBFREtfR21tLjEyLjMKKyAqIFZlcnNpb246IFhpbGlueCBFREsgOC4yLjAyIEVES19JbV9TcDIuNAogICovCiAKIC8qIFN5c3RlbSBDbG9jayBGcmVxdWVuY3kgKi8KLSNkZWZpbmUgWElMSU5YX0NMT0NLX0ZSRVEJNjY2NjY2NjcKKyNkZWZpbmUgWElMSU5YX0NMT0NLX0ZSRVEJMTAwMDAwMDAwCiAKLS8qIEludGVycnVwdCBjb250cm9sbGVyIGlzIGludGNfMCAqLwotI2RlZmluZSBYSUxJTlhfSU5UQ19CQVNFQUREUgkweGQxMDAwZmMwCi0jZGVmaW5lIFhJTElOWF9JTlRDX05VTV9JTlRSX0lOUFVUUwkxMgorLyogTWljcm9ibGF6ZSBpcyBtaWNyb2JsYXplXzAgKi8KKyNkZWZpbmUgWElMSU5YX1VTRV9NU1JfSU5TVFIJMQorI2RlZmluZSBYSUxJTlhfRlNMX05VTUJFUgkzCiAKLS8qIFRpbWVyIHBoZXJpcGhlcnkgaXMgb3BiX3RpbWVyXzAgKi8KLSNkZWZpbmUgWElMSU5YX1RJTUVSX0JBU0VBRERSCTB4YTIwMDAwMDAKKy8qIEludGVycnVwdCBjb250cm9sbGVyIGlzIG9wYl9pbnRjXzAgKi8KKyNkZWZpbmUgWElMSU5YX0lOVENfQkFTRUFERFIJMHg0MTIwMDAwMAorI2RlZmluZSBYSUxJTlhfSU5UQ19OVU1fSU5UUl9JTlBVVFMJNgorCisvKiBUaW1lciBwaGVyaXBoZXJ5IGlzIG9wYl90aW1lcl8xICovCisjZGVmaW5lIFhJTElOWF9USU1FUl9CQVNFQUREUgkweDQxYzAwMDAwCiAjZGVmaW5lIFhJTElOWF9USU1FUl9JUlEJMAogCi0vKiBVYXJ0IHBoZXJpcGhlcnkgaXMgY29uc29sZV91YXJ0ICovCi0jZGVmaW5lIFhJTElOWF9VQVJUX0JBU0VBRERSCTB4YTAwMDAwMDAKKy8qIFVhcnQgcGhlcmlwaGVyeSBpcyBSUzIzMl9VYXJ0ICovCisjZGVmaW5lIFhJTElOWF9VQVJUX0JBU0VBRERSCTB4NDA2MDAwMDAKICNkZWZpbmUgWElMSU5YX1VBUlRfQkFVRFJBVEUJMTE1MjAwCiAKLS8qIEdQSU8gaXMgb3BiX2dwaW9fMCovCi0jZGVmaW5lIFhJTElOWF9HUElPX0JBU0VBRERSCTB4OTAwMDAwMDAKKy8qIElJQyBwaGVyaXBoZXJ5IGlzIElJQ19FRVBST00gKi8KKyNkZWZpbmUgWElMSU5YX0lJQ18wX0JBU0VBRERSCTB4NDA4MDAwMDAKKyNkZWZpbmUgWElMSU5YX0lJQ18wX0ZSRVEJMTAwMDAwCisjZGVmaW5lIFhJTElOWF9JSUNfMF9CSVQJMAogCi0vKiBGbGFzaCBNZW1vcnkgaXMgb3BiX2VtY18wICovCi0jZGVmaW5lIFhJTElOWF9GTEFTSF9TVEFSVAkweDI4MDAwMDAwCisvKiBHUElPIGlzIExFRHNfNEJpdCovCisjZGVmaW5lIFhJTElOWF9HUElPX0JBU0VBRERSCTB4NDAwMDAwMDAKKworLyogRmxhc2ggTWVtb3J5IGlzIEZMQVNIXzJNeDMyICovCisjZGVmaW5lIFhJTElOWF9GTEFTSF9TVEFSVAkweDJjMDAwMDAwCiAjZGVmaW5lIFhJTElOWF9GTEFTSF9TSVpFCTB4MDA4MDAwMDAKIAotLyogTWFpbiBNZW1vcnkgaXMgcGxiX2Rkcl8wICovCi0jZGVmaW5lIFhJTElOWF9SQU1fU1RBUlQJMHgxMDAwMDAwMAotI2RlZmluZSBYSUxJTlhfUkFNX1NJWkUJMHgxMDAwMDAwMAorLyogTWFpbiBNZW1vcnkgaXMgRERSX1NEUkFNXzY0TXgzMiAqLworI2RlZmluZSBYSUxJTlhfUkFNX1NUQVJUCTB4MjgwMDAwMDAKKyNkZWZpbmUgWElMSU5YX1JBTV9TSVpFCTB4MDQwMDAwMDAKIAotLyogU3lzYWNlIENvbnRyb2xsZXIgaXMgb3BiX3N5c2FjZV8wICovCi0jZGVmaW5lIFhJTElOWF9TWVNBQ0VfQkFTRUFERFIJMHhDRjAwMDAwMAotI2RlZmluZSBYSUxJTlhfU1lTQUNFX0hJR0hBRERSCTB4Q0YwMDAxRkYKKy8qIFN5c2FjZSBDb250cm9sbGVyIGlzIFN5c0FDRV9Db21wYWN0Rmxhc2ggKi8KKyNkZWZpbmUgWElMSU5YX1NZU0FDRV9CQVNFQUREUgkweDQxODAwMDAwCisjZGVmaW5lIFhJTElOWF9TWVNBQ0VfSElHSEFERFIJMHg0MTgwZmZmZgogI2RlZmluZSBYSUxJTlhfU1lTQUNFX01FTV9XSURUSAkxNgogCi0vKiBFdGhlcm5ldCBjb250cm9sbGVyIGlzIG9wYl9ldGhlcm5ldF8wICovCisvKiBFdGhlcm5ldCBjb250cm9sbGVyIGlzIEV0aGVybmV0X01BQyAqLwogI2RlZmluZSBYUEFSX1hFTUFDX05VTV9JTlNUQU5DRVMJMQogI2RlZmluZSBYUEFSX09QQl9FVEhFUk5FVF8wX0RFVklDRV9JRAkwCi0jZGVmaW5lIFhQQVJfT1BCX0VUSEVSTkVUXzBfQkFTRUFERFIJMHg2MDAwMDAwMAotI2RlZmluZSBYUEFSX09QQl9FVEhFUk5FVF8wX0hJR0hBRERSCTB4NjAwMDNGRkYKKyNkZWZpbmUgWFBBUl9PUEJfRVRIRVJORVRfMF9CQVNFQUREUgkweDQwYzAwMDAwCisjZGVmaW5lIFhQQVJfT1BCX0VUSEVSTkVUXzBfSElHSEFERFIJMHg0MGMwZmZmZgogI2RlZmluZSBYUEFSX09QQl9FVEhFUk5FVF8wX0RNQV9QUkVTRU5UCTEKICNkZWZpbmUgWFBBUl9PUEJfRVRIRVJORVRfMF9FUlJfQ09VTlRfRVhJU1QJMQogI2RlZmluZSBYUEFSX09QQl9FVEhFUk5FVF8wX01JSV9FWElTVAkxCmRpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUgYi9jb21tb24vTWFrZWZpbGUKaW5kZXggNWRmZDNhOC4uYmMxZjcxNCAxMDA2NDQKLS0tIGEvY29tbW9uL01ha2VmaWxlCisrKyBiL2NvbW1vbi9NYWtlZmlsZQpAQCAtNTAsNyArNTAsNyBAQAogCSAgbWVtc2l6ZS5vIG1paXBoeWJiLm8gbWlpcGh5dXRpbC5vIFwKIAkgIHNfcmVjb3JkLm8gc2VyaWFsLm8gc29mdF9pMmMubyBzb2Z0X3NwaS5vIHNwYXJ0YW4yLm8gc3BhcnRhbjMubyBcCiAJICB1c2IubyB1c2Jfa2JkLm8gdXNiX3N0b3JhZ2UubyBcCi0JICB2aXJ0ZXgyLm8geGlsaW54Lm8gY3JjMTYubyB4eXpNb2RlbS5vIGNtZF9tYWMubworCSAgdmlydGV4Mi5vIHhpbGlueC5vIGNyYzE2Lm8geHl6TW9kZW0ubyBjbWRfbWFjLm8gY21kX21mc2wubwogCiBTUkNTCTo9ICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCiBPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKEFPQkpTKSAkKENPQkpTKSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYm9vdG0uYyBiL2NvbW1vbi9jbWRfYm9vdG0uYwppbmRleCAzMmMyOWU1Li5hNjQ5OWU4IDEwMDY0NAotLS0gYS9jb21tb24vY21kX2Jvb3RtLmMKKysrIGIvY29tbW9uL2NtZF9ib290bS5jCkBAIC03NzksOSArNzc5LDggQEAKIAogCQkJY2hlY2tzdW0gPSBudG9obChoZHItPmloX2RjcmMpOwogCQkJYWRkciA9ICh1bG9uZykoKHVjaGFyICopKGhkcikgKyBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpKTsKLQkJCWxlbiA9IG50b2hsKGhkci0+aWhfc2l6ZSk7CiAKLQkJCWlmKGNoZWNrc3VtICE9IGNyYzMyKDAsICh1Y2hhciAqKWFkZHIsIGxlbikpIHsKKwkJCWlmKGNoZWNrc3VtICE9IGNyYzMyKDAsICh1Y2hhciAqKWFkZHIsIG50b2hsKGhkci0+aWhfc2l6ZSkpKSB7CiAJCQkJcHJpbnRmKCJFUlJPUjogRmxhdCBEZXZpY2UgVHJlZSBjaGVja3N1bSBpcyBpbnZhbGlkXG4iKTsKIAkJCQlyZXR1cm47CiAJCQl9CmRpZmYgLS1naXQgYS9jb21tb24vY21kX2ZsYXNoLmMgYi9jb21tb24vY21kX2ZsYXNoLmMKaW5kZXggY2IxYzViYi4uYTM0YWI3OSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9mbGFzaC5jCisrKyBiL2NvbW1vbi9jbWRfZmxhc2guYwpAQCAtNjkwLDcgKzY5MCw3IEBACiApOwogCiBVX0JPT1RfQ01EKAotCWVyYXNlLCAgIDMsICAgMSwgIGRvX2ZsZXJhc2UsCisJZXJhc2UsICAgMywgICAwLCAgZG9fZmxlcmFzZSwKIAkiZXJhc2UgICAtIGVyYXNlIEZMQVNIIG1lbW9yeVxuIiwKIAkic3RhcnQgZW5kXG4iCiAJIiAgICAtIGVyYXNlIEZMQVNIIGZyb20gYWRkciAnc3RhcnQnIHRvIGFkZHIgJ2VuZCdcbiIKQEAgLTcwNCw3ICs3MDQsNyBAQAogKTsKIAogVV9CT09UX0NNRCgKLQlwcm90ZWN0LCAgNCwgIDEsICAgZG9fcHJvdGVjdCwKKwlwcm90ZWN0LCAgNCwgIDAsICAgZG9fcHJvdGVjdCwKIAkicHJvdGVjdCAtIGVuYWJsZSBvciBkaXNhYmxlIEZMQVNIIHdyaXRlIHByb3RlY3Rpb25cbiIsCiAJIm9uICBzdGFydCBlbmRcbiIKIAkiICAgIC0gcHJvdGVjdCBGTEFTSCBmcm9tIGFkZHIgJ3N0YXJ0JyB0byBhZGRyICdlbmQnXG4iCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2lkZS5jIGIvY29tbW9uL2NtZF9pZGUuYwppbmRleCBjZTk5YTQxLi5lMzA4NDc0IDEwMDY0NAotLS0gYS9jb21tb24vY21kX2lkZS5jCisrKyBiL2NvbW1vbi9jbWRfaWRlLmMKQEAgLTUxNCwxMSArNTE0LDExIEBACiAJdW5zaWduZWQgY2hhciBjOwogCWludCBpLCBidXM7CiAjaWYgZGVmaW5lZChDT05GSUdfQU1JR0FPTkVHM1NFKSB8fCBkZWZpbmVkKENPTkZJR19TQzMpCi0JdW5zaWduZWQgaW50IGF0YV9yZXNldF90aW1lOworCXVuc2lnbmVkIGludCBhdGFfcmVzZXRfdGltZSA9IEFUQV9SRVNFVF9USU1FOworCWNoYXIgKnM7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQU1JR0FPTkVHM1NFCiAJdW5zaWduZWQgaW50IG1heF9idXNfc2NhbjsKLQljaGFyICpzOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0lERV84eHhfUENDQVJECiAJZXh0ZXJuIGludCBwY21jaWFfb24gKHZvaWQpOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9tZnNsLmMgYi9jb21tb24vY21kX21mc2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmEyNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL2NtZF9tZnNsLmMKQEAgLTAsMCArMSw0MTcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDcgTWljaGFsIFNpbWVrCisgKgorICogTWljaGFsICBTSU1FSyA8bW9uc3RyQG1vbnN0ci5ldT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBNaWNyb2JsYXplIEZTTCBzdXBwb3J0CisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX01GU0wpCisjaW5jbHVkZSA8YXNtL2FzbS5oPgorCitpbnQgZG9fZnJkIChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgaW50IGZzbG51bTsKKwl1bnNpZ25lZCBpbnQgbnVtOworCXVuc2lnbmVkIGludCBibG9ja2luZzsKKworCWlmIChhcmdjIDwgMikgeworCQlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmc2xudW0gPSAodW5zaWduZWQgaW50KXNpbXBsZV9zdHJ0b3VsIChhcmd2WzFdLCBOVUxMLCAxNik7CisJYmxvY2tpbmcgPSAodW5zaWduZWQgaW50KXNpbXBsZV9zdHJ0b3VsIChhcmd2WzJdLCBOVUxMLCAxNik7CisJaWYgKGZzbG51bSA8IDAgfHwgZnNsbnVtID49IFhJTElOWF9GU0xfTlVNQkVSKSB7CisJCXB1dHMgKCJCYWQgbnVtYmVyIG9mIEZTTFxuIik7CisJCXByaW50ZiAoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7CisJCXJldHVybiAxOworCX0KKworCXN3aXRjaCAoZnNsbnVtKSB7CisjaWYgKFhJTElOWF9GU0xfTlVNQkVSID4gMCkKKwljYXNlIDA6CisJCXN3aXRjaCAoYmxvY2tpbmcpIHsKKwkJY2FzZSAwOglOR0VUIChudW0sIDApOworCQkJYnJlYWs7CisJCWNhc2UgMToJTkNHRVQgKG51bSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAyOglHRVQgKG51bSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAzOglDR0VUIChudW0sIDApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMjsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lmIChYSUxJTlhfRlNMX05VTUJFUiA+IDEpCisJY2FzZSAxOgorCQlzd2l0Y2ggKGJsb2NraW5nKSB7CisJCWNhc2UgMDoJTkdFVCAobnVtLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CU5DR0VUIChudW0sIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMjoJR0VUIChudW0sIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMzoJQ0dFVCAobnVtLCAxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDI7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKyNpZiAoWElMSU5YX0ZTTF9OVU1CRVIgPiAyKQorCWNhc2UgMjoKKwkJc3dpdGNoIChibG9ja2luZykgeworCQljYXNlIDA6CU5HRVQgKG51bSwgMik7CisJCQlicmVhazsKKwkJY2FzZSAxOglOQ0dFVCAobnVtLCAyKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CUdFVCAobnVtLCAyKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CUNHRVQgKG51bSwgMik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAyOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWYgKFhJTElOWF9GU0xfTlVNQkVSID4gMykKKwljYXNlIDM6CisJCXN3aXRjaCAoYmxvY2tpbmcpIHsKKwkJY2FzZSAwOglOR0VUIChudW0sIDMpOworCQkJYnJlYWs7CisJCWNhc2UgMToJTkNHRVQgKG51bSwgMyk7CisJCQlicmVhazsKKwkJY2FzZSAyOglHRVQgKG51bSwgMyk7CisJCQlicmVhazsKKwkJY2FzZSAzOglDR0VUIChudW0sIDMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMjsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lmIChYSUxJTlhfRlNMX05VTUJFUiA+IDQpCisJY2FzZSA0OgorCQlzd2l0Y2ggKGJsb2NraW5nKSB7CisJCWNhc2UgMDoJTkdFVCAobnVtLCA0KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CU5DR0VUIChudW0sIDQpOworCQkJYnJlYWs7CisJCWNhc2UgMjoJR0VUIChudW0sIDQpOworCQkJYnJlYWs7CisJCWNhc2UgMzoJQ0dFVCAobnVtLCA0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDI7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKyNpZiAoWElMSU5YX0ZTTF9OVU1CRVIgPiA1KQorCWNhc2UgNToKKwkJc3dpdGNoIChibG9ja2luZykgeworCQljYXNlIDA6CU5HRVQgKG51bSwgNSk7CisJCQlicmVhazsKKwkJY2FzZSAxOglOQ0dFVCAobnVtLCA1KTsKKwkJCWJyZWFrOworCQljYXNlIDI6CUdFVCAobnVtLCA1KTsKKwkJCWJyZWFrOworCQljYXNlIDM6CUNHRVQgKG51bSwgNSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAyOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWYgKFhJTElOWF9GU0xfTlVNQkVSID4gNikKKwljYXNlIDY6CisJCXN3aXRjaCAoYmxvY2tpbmcpIHsKKwkJY2FzZSAwOglOR0VUIChudW0sIDYpOworCQkJYnJlYWs7CisJCWNhc2UgMToJTkNHRVQgKG51bSwgNik7CisJCQlicmVhazsKKwkJY2FzZSAyOglHRVQgKG51bSwgNik7CisJCQlicmVhazsKKwkJY2FzZSAzOglDR0VUIChudW0sIDYpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMjsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lmIChYSUxJTlhfRlNMX05VTUJFUiA+IDcpCisJY2FzZSA3OgorCQlzd2l0Y2ggKGJsb2NraW5nKSB7CisJCWNhc2UgMDoJTkdFVCAobnVtLCA3KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CU5DR0VUIChudW0sIDcpOworCQkJYnJlYWs7CisJCWNhc2UgMjoJR0VUIChudW0sIDcpOworCQkJYnJlYWs7CisJCWNhc2UgMzoJQ0dFVCAobnVtLCA3KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDI7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9CisKKwlwcmludGYgKCIlMDF4OiAweCUwOGx4IC0gJXMgJXMgcmVhZFxuIiwgZnNsbnVtLCBudW0sCisJCWJsb2NraW5nIDwgMiAgPyAibm9uIGJsb2NraW5nIiA6ICJibG9ja2luZyIsCisJCSgoYmxvY2tpbmcgPT0gMSkgfHwgKGJsb2NraW5nID09IDMpKSA/ICJjb250cm9sIiA6ICJkYXRhIiApOworCXJldHVybiAwOworfQorCitpbnQgZG9fZndyIChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgaW50IGZzbG51bTsKKwl1bnNpZ25lZCBpbnQgbnVtOworCXVuc2lnbmVkIGludCBibG9ja2luZzsKKworCWlmIChhcmdjIDwgMykgeworCQlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmc2xudW0gPSAodW5zaWduZWQgaW50KXNpbXBsZV9zdHJ0b3VsIChhcmd2WzFdLCBOVUxMLCAxNik7CisJbnVtID0gKHVuc2lnbmVkIGludClzaW1wbGVfc3RydG91bCAoYXJndlsyXSwgTlVMTCwgMTYpOworCWJsb2NraW5nID0gKHVuc2lnbmVkIGludClzaW1wbGVfc3RydG91bCAoYXJndlszXSwgTlVMTCwgMTYpOworCWlmIChmc2xudW0gPCAwIHx8IGZzbG51bSA+PSBYSUxJTlhfRlNMX05VTUJFUikgeworCQlwcmludGYgKCJCYWQgbnVtYmVyIG9mIEZTTFxuVXNhZ2U6XG4lc1xuIiwgY21kdHAtPnVzYWdlKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3dpdGNoIChmc2xudW0pIHsKKyNpZiAoWElMSU5YX0ZTTF9OVU1CRVIgPiAwKQorCWNhc2UgMDoKKwkJc3dpdGNoIChibG9ja2luZykgeworCQljYXNlIDA6CU5QVVQgKG51bSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAxOglOQ1BVVCAobnVtLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CVBVVCAobnVtLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CUNQVVQgKG51bSwgMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAyOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWYgKFhJTElOWF9GU0xfTlVNQkVSID4gMSkKKwljYXNlIDE6CisJCXN3aXRjaCAoYmxvY2tpbmcpIHsKKwkJY2FzZSAwOglOUFVUIChudW0sIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMToJTkNQVVQgKG51bSwgMSk7CisJCQlicmVhazsKKwkJY2FzZSAyOglQVVQgKG51bSwgMSk7CisJCQlicmVhazsKKwkJY2FzZSAzOglDUFVUIChudW0sIDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMjsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lmIChYSUxJTlhfRlNMX05VTUJFUiA+IDIpCisJY2FzZSAyOgorCQlzd2l0Y2ggKGJsb2NraW5nKSB7CisJCWNhc2UgMDoJTlBVVCAobnVtLCAyKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CU5DUFVUIChudW0sIDIpOworCQkJYnJlYWs7CisJCWNhc2UgMjoJUFVUIChudW0sIDIpOworCQkJYnJlYWs7CisJCWNhc2UgMzoJQ1BVVCAobnVtLCAyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDI7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKyNpZiAoWElMSU5YX0ZTTF9OVU1CRVIgPiAzKQorCWNhc2UgMzoKKwkJc3dpdGNoIChibG9ja2luZykgeworCQljYXNlIDA6CU5QVVQgKG51bSwgMyk7CisJCQlicmVhazsKKwkJY2FzZSAxOglOQ1BVVCAobnVtLCAzKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CVBVVCAobnVtLCAzKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CUNQVVQgKG51bSwgMyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAyOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWYgKFhJTElOWF9GU0xfTlVNQkVSID4gNCkKKwljYXNlIDQ6CisJCXN3aXRjaCAoYmxvY2tpbmcpIHsKKwkJY2FzZSAwOglOUFVUIChudW0sIDQpOworCQkJYnJlYWs7CisJCWNhc2UgMToJTkNQVVQgKG51bSwgNCk7CisJCQlicmVhazsKKwkJY2FzZSAyOglQVVQgKG51bSwgNCk7CisJCQlicmVhazsKKwkJY2FzZSAzOglDUFVUIChudW0sIDQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMjsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lmIChYSUxJTlhfRlNMX05VTUJFUiA+IDUpCisJY2FzZSA1OgorCQlzd2l0Y2ggKGJsb2NraW5nKSB7CisJCWNhc2UgMDoJTlBVVCAobnVtLCA1KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CU5DUFVUIChudW0sIDUpOworCQkJYnJlYWs7CisJCWNhc2UgMjoJUFVUIChudW0sIDUpOworCQkJYnJlYWs7CisJCWNhc2UgMzoJQ1BVVCAobnVtLCA1KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDI7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKyNpZiAoWElMSU5YX0ZTTF9OVU1CRVIgPiA2KQorCWNhc2UgNjoKKwkJc3dpdGNoIChibG9ja2luZykgeworCQljYXNlIDA6CU5QVVQgKG51bSwgNik7CisJCQlicmVhazsKKwkJY2FzZSAxOglOQ1BVVCAobnVtLCA2KTsKKwkJCWJyZWFrOworCQljYXNlIDI6CVBVVCAobnVtLCA2KTsKKwkJCWJyZWFrOworCQljYXNlIDM6CUNQVVQgKG51bSwgNik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAyOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWYgKFhJTElOWF9GU0xfTlVNQkVSID4gNykKKwljYXNlIDc6CisJCXN3aXRjaCAoYmxvY2tpbmcpIHsKKwkJY2FzZSAwOglOUFVUIChudW0sIDcpOworCQkJYnJlYWs7CisJCWNhc2UgMToJTkNQVVQgKG51bSwgNyk7CisJCQlicmVhazsKKwkJY2FzZSAyOglQVVQgKG51bSwgNyk7CisJCQlicmVhazsKKwkJY2FzZSAzOglDUFVUIChudW0sIDcpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMjsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KKworCXByaW50ZiAoIiUwMXg6IDB4JTA4bHggLSAlcyAlcyB3cml0ZVxuIiwgZnNsbnVtLCBudW0sCisJCWJsb2NraW5nIDwgMiAgPyAibm9uIGJsb2NraW5nIiA6ICJibG9ja2luZyIsCisJCSgoYmxvY2tpbmcgPT0gMSkgfHwgKGJsb2NraW5nID09IDMpKSA/ICJjb250cm9sIiA6ICJkYXRhIiApOworCXJldHVybiAwOworCit9CisKK2ludCBkb19yc3ByIChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdW5zaWduZWQgaW50IHJlZyA9IDA7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwlyZWcgPSAodW5zaWduZWQgaW50KXNpbXBsZV9zdHJ0b3VsIChhcmd2WzFdLCBOVUxMLCAxNik7CisJdmFsID0gKHVuc2lnbmVkIGludClzaW1wbGVfc3RydG91bCAoYXJndlsyXSwgTlVMTCwgMTYpOworCWlmIChhcmdjIDwgMSkgeworCQlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOworCQlyZXR1cm4gMTsKKwl9CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIDB4MToKKwkJaWYgKGFyZ2MgPiAyKSB7CisJCQlNVFMgKHZhbCwgcm1zcik7CisJCQlOT1A7CisJCQlNRlMgKHZhbCwgcm1zcik7CisKKwkJfSBlbHNlIHsKKwkJCU1GUyAodmFsLCBybXNyKTsKKwkJfQorCQlwdXRzICgiTVNSIik7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQlNRlMgKHZhbCwgcmVhcik7CisJCXB1dHMgKCJFQVIiKTsKKwkJYnJlYWs7CisJY2FzZSAweDU6CisJCU1GUyAodmFsLCByZXNyKTsKKwkJcHV0cyAoIkVTUiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9CisJcHJpbnRmICgiOiAweCUwOGx4XG4iLCB2YWwpOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitVX0JPT1RfQ01EIChmcmQsIDMsIDEsIGRvX2ZyZCwKKwkJImZyZCAgICAgLSByZWFkIGRhdGEgZnJvbSBGU0xcbiIsCisJCSItIFtmc2xudW0gWzB8MXwyfDNdXVxuIgorCQkiIDAgLSBub24gYmxvY2tpbmcgZGF0YSByZWFkXG4iCisJCSIgMSAtIG5vbiBibG9ja2luZyBjb250cm9sIHJlYWRcbiIKKwkJIiAyIC0gYmxvY2tpbmcgZGF0YSByZWFkXG4iCisJCSIgMyAtIGJsb2NraW5nIGNvbnRyb2wgcmVhZFxuIik7CisKKworVV9CT09UX0NNRCAoZndyLCA0LCAxLCBkb19md3IsCisJCSJmd3IgICAgIC0gd3JpdGUgZGF0YSB0byBGU0xcbiIsCisJCSItIFtmc2xudW0gWzB8MXwyfDNdXVxuIgorCQkiIDAgLSBub24gYmxvY2tpbmcgZGF0YSB3cml0ZVxuIgorCQkiIDEgLSBub24gYmxvY2tpbmcgY29udHJvbCB3cml0ZVxuIgorCQkiIDIgLSBibG9ja2luZyBkYXRhIHdyaXRlXG4iCisJCSIgMyAtIGJsb2NraW5nIGNvbnRyb2wgd3JpdGVcbiIpOworCitVX0JPT1RfQ01EIChyc3ByLCAzLCAxLCBkb19yc3ByLAorCQkicm1zciAgICAtIHJlYWQvd3JpdGUgc3BlY2lhbCBwdXJwb3NlIHJlZ2lzdGVyXG4iLAorCQkiLSByZWdfbnVtIFt3cml0ZSB2YWx1ZV0gcmVhZC93cml0ZSBzcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJcbiIKKwkJIiAwIC0gTVNSIC0gTWFjaGluZSBzdGF0dXMgcmVnaXN0ZXJcbiIKKwkJIiAxIC0gRUFSIC0gRXhjZXB0aW9uIGFkZHJlc3MgcmVnaXN0ZXJcbiIKKwkJIiAyIC0gRVNSIC0gRXhjZXB0aW9uIHN0YXR1cyByZWdpc3RlclxuIik7CisKKyNlbmRpZgkJCQkvKiBDT05GSUdfTUlDUk9CTEFaRSAmIENGR19DTURfTUZTTCAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9taXNjLmMgYi9jb21tb24vY21kX21pc2MuYwppbmRleCA2N2VlOWU4Li5hOTkyMjJkIDEwMDY0NAotLS0gYS9jb21tb24vY21kX21pc2MuYworKysgYi9jb21tb24vY21kX21pc2MuYwpAQCAtNjMsNyArNjMsNyBAQAogI2VuZGlmICAvKiBDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lSUSAqLwogCiBVX0JPT1RfQ01EKAotCXNsZWVwICwgICAgMiwgICAgMiwgICAgIGRvX3NsZWVwLAorCXNsZWVwICwgICAgMiwgICAgMSwgICAgIGRvX3NsZWVwLAogCSJzbGVlcCAgIC0gZGVsYXkgZXhlY3V0aW9uIGZvciBzb21lIHRpbWVcbiIsCiAJIk5cbiIKIAkiICAgIC0gZGVsYXkgZXhlY3V0aW9uIGZvciBOIHNlY29uZHMgKE4gaXMgX2RlY2ltYWxfICEhISlcbiIKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfbnZlZGl0LmMgYi9jb21tb24vY21kX252ZWRpdC5jCmluZGV4IDk4MzRiYTYuLjk3N2VjNWIgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfbnZlZGl0LmMKKysrIGIvY29tbW9uL2NtZF9udmVkaXQuYwpAQCAtMzkxLDcgKzM5MSwxMCBAQAogdm9pZCBzZXRlbnYgKGNoYXIgKnZhcm5hbWUsIGNoYXIgKnZhcnZhbHVlKQogewogCWNoYXIgKmFyZ3ZbNF0gPSB7ICJzZXRlbnYiLCB2YXJuYW1lLCB2YXJ2YWx1ZSwgTlVMTCB9OwotCV9kb19zZXRlbnYgKDAsIDMsIGFyZ3YpOworCWlmICh2YXJ2YWx1ZSA9PSBOVUxMKQorCQlfZG9fc2V0ZW52ICgwLCAyLCBhcmd2KTsKKwllbHNlCisJCV9kb19zZXRlbnYgKDAsIDMsIGFyZ3YpOwogfQogCiBpbnQgZG9fc2V0ZW52ICggY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCmRpZmYgLS1naXQgYS9jb21tb24vY21kX3BjbWNpYS5jIGIvY29tbW9uL2NtZF9wY21jaWEuYwppbmRleCAyZWI1YjI2Li5iMWE1OTRmIDEwMDY0NAotLS0gYS9jb21tb24vY21kX3BjbWNpYS5jCisrKyBiL2NvbW1vbi9jbWRfcGNtY2lhLmMKQEAgLTg3LDcgKzg3LDcgQEAKIH0KIAogVV9CT09UX0NNRCgKLQlwaW5pdCwJMiwJMSwJZG9fcGluaXQsCisJcGluaXQsCTIsCTAsCWRvX3Bpbml0LAogCSJwaW5pdCAgIC0gUENNQ0lBIHN1Yi1zeXN0ZW1cbiIsCiAJIm9uICAtIHBvd2VyIG9uIFBDTUNJQSBzb2NrZXRcbiIKIAkJCSJwaW5pdCBvZmYgLSBwb3dlciBvZmYgUENNQ0lBIHNvY2tldFxuIgpkaWZmIC0tZ2l0IGEvY29tbW9uL2NvbnNvbGUuYyBiL2NvbW1vbi9jb25zb2xlLmMKaW5kZXggZTlmMjNiZS4uZDhhMGNiNiAxMDA2NDQKLS0tIGEvY29tbW9uL2NvbnNvbGUuYworKysgYi9jb21tb24vY29uc29sZS5jCkBAIC00OTQsMTMgKzQ5NCw3IEBACiAJLyogc3VwcHJlc3MgYWxsIG91dHB1dCBpZiBzcGxhc2ggc2NyZWVuIGlzIGVuYWJsZWQgYW5kIHdlIGhhdmUKIAkgICBhIGJtcCB0byBkaXNwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCWlmIChnZXRlbnYoInNwbGFzaGltYWdlIikgIT0gTlVMTCkKLQkJb3V0cHV0ZGV2ID0gc2VhcmNoX2RldmljZSAoREVWX0ZMQUdTX09VVFBVVCwgIm51bGxkZXYiKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NJTEVOVF9DT05TT0xFCi0JLyogU3VwcHJlc3MgYWxsIG91dHB1dCBpZiAic2lsZW50IiBtb2RlIHJlcXVlc3RlZAkJKi8KLQlpZiAoZ2QtPmZsYWdzICYgR0RfRkxHX1NJTEVOVCkKLQkJb3V0cHV0ZGV2ID0gc2VhcmNoX2RldmljZSAoREVWX0ZMQUdTX09VVFBVVCwgIm51bGxkZXYiKTsKKwkJZ2QtPmZsYWdzIHw9IEdEX0ZMR19TSUxFTlQ7CiAjZW5kaWYKIAogCS8qIFNjYW4gZGV2aWNlcyBsb29raW5nIGZvciBpbnB1dCBhbmQgb3V0cHV0IGRldmljZXMgKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi9mZHRfc3VwcG9ydC5jIGIvY29tbW9uL2ZkdF9zdXBwb3J0LmMKaW5kZXggOTFiNzI5Zi4uNjkwOTljNCAxMDA2NDQKLS0tIGEvY29tbW9uL2ZkdF9zdXBwb3J0LmMKKysrIGIvY29tbW9uL2ZkdF9zdXBwb3J0LmMKQEAgLTU2LDcgKzU2LDcgQEAKIAl9CiAKIAlpZiAoaW5pdHJkX3N0YXJ0ICYmIGluaXRyZF9lbmQpIHsKLQkJc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5ICpyZTsKKwkJc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5IHJlOwogCQlpbnQgIHVzZWQ7CiAJCWludCAgdG90YWw7CiAJCWludCAgajsKQEAgLTc3LDcgKzc3LDcgQEAKIAkJICovCiAJCWZvciAoaiA9IDA7IGogPCB1c2VkOyBqKyspIHsKIAkJCWVyciA9IGZkdF9nZXRfcmVzZXJ2ZW1hcChmZHQsIGosICZyZSk7Ci0JCQlpZiAocmUtPmFkZHJlc3MgPT0gaW5pdHJkX3N0YXJ0KSB7CisJCQlpZiAocmUuYWRkcmVzcyA9PSBpbml0cmRfc3RhcnQpIHsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvY29tbW9uL21haW4uYyBiL2NvbW1vbi9tYWluLmMKaW5kZXggY2M0YjUwZi4uNTUzYWMzNSAxMDA2NDQKLS0tIGEvY29tbW9uL21haW4uYworKysgYi9jb21tb24vbWFpbi5jCkBAIC0xMTIsMTQgKzExMiw2IEBACiAJdV9pbnQgcHJlc3NrZXlfbWF4ID0gMDsKIAl1X2ludCBpOwogCi0jaWZkZWYgQ09ORklHX1NJTEVOVF9DT05TT0xFCi0JaWYgKGdkLT5mbGFncyAmIEdEX0ZMR19TSUxFTlQpIHsKLQkJLyogUmVzdG9yZSBzZXJpYWwgY29uc29sZSAqLwotCQljb25zb2xlX2Fzc2lnbiAoc3Rkb3V0LCAic2VyaWFsIik7Ci0JCWNvbnNvbGVfYXNzaWduIChzdGRlcnIsICJzZXJpYWwiKTsKLQl9Ci0jZW5kaWYKLQogIyAgaWZkZWYgQ09ORklHX0FVVE9CT09UX1BST01QVAogCXByaW50ZiAoQ09ORklHX0FVVE9CT09UX1BST01QVCwgYm9vdGRlbGF5KTsKICMgIGVuZGlmCkBAIC0xOTksMTQgKzE5MSw4IEBACiAjICBlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NJTEVOVF9DT05TT0xFCi0JaWYgKGFib3J0KSB7Ci0JCS8qIHBlcm1hbmVudGx5IGVuYWJsZSBub3JtYWwgY29uc29sZSBvdXRwdXQgKi8KLQkJZ2QtPmZsYWdzICY9IH4oR0RfRkxHX1NJTEVOVCk7Ci0JfSBlbHNlIGlmIChnZC0+ZmxhZ3MgJiBHRF9GTEdfU0lMRU5UKSB7Ci0JCS8qIFJlc3RvcmUgc2lsZW50IGNvbnNvbGUgKi8KLQkJY29uc29sZV9hc3NpZ24gKHN0ZG91dCwgIm51bGxkZXYiKTsKLQkJY29uc29sZV9hc3NpZ24gKHN0ZGVyciwgIm51bGxkZXYiKTsKLQl9CisJaWYgKGFib3J0KQorCQlnZC0+ZmxhZ3MgJj0gfkdEX0ZMR19TSUxFTlQ7CiAjZW5kaWYKIAogCXJldHVybiBhYm9ydDsKQEAgLTIyMiwxNCArMjA4LDYgQEAKIHsKIAlpbnQgYWJvcnQgPSAwOwogCi0jaWZkZWYgQ09ORklHX1NJTEVOVF9DT05TT0xFCi0JaWYgKGdkLT5mbGFncyAmIEdEX0ZMR19TSUxFTlQpIHsKLQkJLyogUmVzdG9yZSBzZXJpYWwgY29uc29sZSAqLwotCQljb25zb2xlX2Fzc2lnbiAoc3Rkb3V0LCAic2VyaWFsIik7Ci0JCWNvbnNvbGVfYXNzaWduIChzdGRlcnIsICJzZXJpYWwiKTsKLQl9Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19NRU5VUFJPTVBUCiAJcHJpbnRmKENPTkZJR19NRU5VUFJPTVBULCBib290ZGVsYXkpOwogI2Vsc2UKQEAgLTI0NSw3ICsyMjMsNyBAQAogCQlpZiAodHN0YygpKSB7CS8qIHdlIGdvdCBhIGtleSBwcmVzcwkqLwogCQkJKHZvaWQpIGdldGMoKTsgIC8qIGNvbnN1bWUgaW5wdXQJKi8KIAkJCXB1dHMgKCJcYlxiXGIgMCIpOwotCQkJYWJvcnQgPSAxOyAJLyogZG9uJ3QgYXV0byBib290CSovCisJCQlhYm9ydCA9IDE7CS8qIGRvbid0IGF1dG8gYm9vdAkqLwogCQl9CiAJfQogI2VuZGlmCkBAIC0yNzUsMTQgKzI1Myw4IEBACiAJcHV0YyAoJ1xuJyk7CiAKICNpZmRlZiBDT05GSUdfU0lMRU5UX0NPTlNPTEUKLQlpZiAoYWJvcnQpIHsKLQkJLyogcGVybWFuZW50bHkgZW5hYmxlIG5vcm1hbCBjb25zb2xlIG91dHB1dCAqLwotCQlnZC0+ZmxhZ3MgJj0gfihHRF9GTEdfU0lMRU5UKTsKLQl9IGVsc2UgaWYgKGdkLT5mbGFncyAmIEdEX0ZMR19TSUxFTlQpIHsKLQkJLyogUmVzdG9yZSBzaWxlbnQgY29uc29sZSAqLwotCQljb25zb2xlX2Fzc2lnbiAoc3Rkb3V0LCAibnVsbGRldiIpOwotCQljb25zb2xlX2Fzc2lnbiAoc3RkZXJyLCAibnVsbGRldiIpOwotCX0KKwlpZiAoYWJvcnQpCisJCWdkLT5mbGFncyAmPSB+R0RfRkxHX1NJTEVOVDsKICNlbmRpZgogCiAJcmV0dXJuIGFib3J0OwpAQCAtMTIxOSw2ICsxMTkxLDggQEAKIAogCWlmIChvdXRwdXRjbnQpCiAJCSpvdXRwdXQgPSAwOworCWVsc2UKKwkJKihvdXRwdXQgLSAxKSA9IDA7CiAKICNpZmRlZiBERUJVR19QQVJTRVIKIAlwcmludGYgKCJbUFJPQ0VTU19NQUNST1NdIE9VVFBVVCBsZW4gJWQ6IFwiJXNcIlxuIiwKQEAgLTEzNjIsNyArMTMzNiw3IEBACiAKIAkJLyogRGlkIHRoZSB1c2VyIHN0b3AgdGhpcz8gKi8KIAkJaWYgKGhhZF9jdHJsYyAoKSkKLQkJCXJldHVybiAwOwkvKiBpZiBzdG9wcGVkIHRoZW4gbm90IHJlcGVhdGFibGUgKi8KKwkJCXJldHVybiAtMTsJLyogaWYgc3RvcHBlZCB0aGVuIG5vdCByZXBlYXRhYmxlICovCiAJfQogCiAJcmV0dXJuIHJjID8gcmMgOiByZXBlYXRhYmxlOwpkaWZmIC0tZ2l0IGEvY29tbW9uL3NvZnRfaTJjLmMgYi9jb21tb24vc29mdF9pMmMuYwppbmRleCBlZGFkNTFiLi4wZjZlM2E5IDEwMDY0NAotLS0gYS9jb21tb24vc29mdF9pMmMuYworKysgYi9jb21tb24vc29mdF9pMmMuYwpAQCAtMzYsNiArMzYsOSBAQAogI2lmZGVmCUNPTkZJR19JWFA0MjUJCQkvKiBvbmx5IHZhbGlkIGZvciBJWFA0MjUgKi8KICNpbmNsdWRlIDxhc20vYXJjaC9peHA0MjUuaD4KICNlbmRpZgorI2lmZGVmIENPTkZJR19MUEMyMjkyCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGkyYy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU09GVF9JMkMpCmRpZmYgLS1naXQgYS9jcHUvYXJtNzIwdC9scGMyMjkyL01ha2VmaWxlIGIvY3B1L2FybTcyMHQvbHBjMjI5Mi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDBmMWUzCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTcyMHQvbHBjMjI5Mi9NYWtlZmlsZQpAQCAtMCwwICsxLDUwIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA3CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSAkKG9iailsaWIkKFNPQykuYQorCitDT0JKUwk9IGZsYXNoLm8gbW1jLm8gbW1jX2h3Lm8gc3BpLm8KK1NPQkpTCT0gJChvYmopaWFwX2VudHJ5Lm8KKworU1JDUwk6PSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCisKK2FsbDoJJChvYmopLmRlcGVuZCAkKExJQikKKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCisKKyMgdGhpcyBNVVNUIGJlIGNvbXBpbGVkIGFzIHRodW1iIGNvZGUhCiskKFNPQkpTKToKKwkkKENDKSAkKEFGTEFHUykgLW1hcmNoPWFybXY0dCAtYyAtbyAkKFNPQkpTKSBpYXBfZW50cnkuUworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L2FybTcyMHQvbHBjMjI5Mi9mbGFzaC5jIGIvY3B1L2FybTcyMHQvbHBjMjI5Mi9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1Yzg2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtNzIwdC9scGMyMjkyL2ZsYXNoLmMKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYgRW1iZWRkZWQgQXJ0aXN0cyBBQiA8d3d3LmVtYmVkZGVkYXJ0aXN0cy5jb20+CisgKgorICogTW9kaWZpZWQgdG8gcmVtb3ZlIGFsbCBidXQgdGhlIElBUC1jb21tYW5kIHJlbGF0ZWQgY29kZSBieQorICogR2FyeSBKZW5uZWpvaG4gPGdhcnlqQGRlbnguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKKy8qIElBUCBjb21tYW5kcyB1c2UgMzIgYnl0ZXMgYXQgdGhlIHRvcCBvZiBDUFUgaW50ZXJuYWwgc3JhbSwgd2UKKyAgIHVzZSA1MTIgYnl0ZXMgYmVsb3cgdGhhdCAqLworI2RlZmluZSBDT1BZX0JVRkZFUl9MT0NBVElPTiAweDQwMDAzZGUwCisKKyNkZWZpbmUgSUFQX0xPQ0FUSU9OIDB4N2ZmZmZmZjEKKyNkZWZpbmUgSUFQX0NNRF9QUkVQQVJFIDUwCisjZGVmaW5lIElBUF9DTURfQ09QWSA1MQorI2RlZmluZSBJQVBfQ01EX0VSQVNFIDUyCisjZGVmaW5lIElBUF9DTURfQ0hFQ0sgNTMKKyNkZWZpbmUgSUFQX0NNRF9JRCA1NAorI2RlZmluZSBJQVBfQ01EX1ZFUlNJT04gNTUKKyNkZWZpbmUgSUFQX0NNRF9DT01QQVJFIDU2CisKKyNkZWZpbmUgSUFQX1JFVF9DTURfU1VDQ0VTUyAwCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbW1hbmRbNV07CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZXN1bHRbMl07CisKK2V4dGVybiB2b2lkIGlhcF9lbnRyeSh1bnNpZ25lZCBsb25nICogY29tbWFuZCwgdW5zaWduZWQgbG9uZyAqIHJlc3VsdCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2ZsYXNoX3NlY3RvcihmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBmbGFzaF9hZGRyKQoreworCWludCBpOworCisJZm9yKGkgPSAxOyBpIDwgKGluZm8tPnNlY3Rvcl9jb3VudCk7IGkrKykgeworCQlpZiAoZmxhc2hfYWRkciA8IChpbmZvLT5zdGFydFtpXSkpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gKGktMSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGZsYXNoX2FkZHIgaXMgYWxpZ25lZCBvbiA1MTIgYnl0ZXMgYm91bmRhcnkKKyAqIGluIGZsYXNoLiBUaGlzIGZ1bmN0aW9uIGFsc28gYXNzdW1lcyB0aGF0IHByZXBhcmUgaGF2ZSBiZWVuIGNhbGxlZAorICogZm9yIHRoZSBzZWN0b3IgaW4gcXVlc3Rpb24uCisgKi8KK2ludCBscGMyMjkyX2NvcHlfYnVmZmVyX3RvX2ZsYXNoKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGZsYXNoX2FkZHIpCit7CisJaW50IGZpcnN0X3NlY3RvcjsKKwlpbnQgbGFzdF9zZWN0b3I7CisKKwlmaXJzdF9zZWN0b3IgPSBnZXRfZmxhc2hfc2VjdG9yKGluZm8sIGZsYXNoX2FkZHIpOworCWxhc3Rfc2VjdG9yID0gZ2V0X2ZsYXNoX3NlY3RvcihpbmZvLCBmbGFzaF9hZGRyICsgNTEyIC0gMSk7CisKKwkvKiBwcmVwYXJlIHNlY3RvcnMgZm9yIHdyaXRlICovCisJY29tbWFuZFswXSA9IElBUF9DTURfUFJFUEFSRTsKKwljb21tYW5kWzFdID0gZmlyc3Rfc2VjdG9yOworCWNvbW1hbmRbMl0gPSBsYXN0X3NlY3RvcjsKKwlpYXBfZW50cnkoY29tbWFuZCwgcmVzdWx0KTsKKwlpZiAocmVzdWx0WzBdICE9IElBUF9SRVRfQ01EX1NVQ0NFU1MpIHsKKwkJcHJpbnRmKCJJQVAgcHJlcGFyZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gRVJSX1BST0dfRVJST1I7CisJfQorCisJY29tbWFuZFswXSA9IElBUF9DTURfQ09QWTsKKwljb21tYW5kWzFdID0gZmxhc2hfYWRkcjsKKwljb21tYW5kWzJdID0gQ09QWV9CVUZGRVJfTE9DQVRJT047CisJY29tbWFuZFszXSA9IDUxMjsKKwljb21tYW5kWzRdID0gQ0ZHX1NZU19DTEtfRlJFUSA+PiAxMDsKKwlpYXBfZW50cnkoY29tbWFuZCwgcmVzdWx0KTsKKwlpZiAocmVzdWx0WzBdICE9IElBUF9SRVRfQ01EX1NVQ0NFU1MpIHsKKwkJcHJpbnRmKCJJQVAgY29weSBmYWlsZWRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK2ludCBscGMyMjkyX2ZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKK3sKKwlpbnQgZmxhZzsKKwlpbnQgcHJvdDsKKwlpbnQgc2VjdDsKKworCXByb3QgPSAwOworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyArK3NlY3QpIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKKwkJCXByb3QrKzsKKwkJfQorCX0KKwlpZiAocHJvdCkKKwkJcmV0dXJuIEVSUl9QUk9URUNURUQ7CisKKworCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKworCXByaW50ZiAoIkVyYXNpbmcgJWQgc2VjdG9ycyBzdGFydGluZyBhdCBzZWN0b3IgJTJkLlxuIgorCSJUaGlzIG1ha2UgdGFrZSBzb21lIHRpbWUgLi4uICIsCisJc19sYXN0IC0gc19maXJzdCArIDEsIHNfZmlyc3QpOworCisJY29tbWFuZFswXSA9IElBUF9DTURfUFJFUEFSRTsKKwljb21tYW5kWzFdID0gc19maXJzdDsKKwljb21tYW5kWzJdID0gc19sYXN0OworCWlhcF9lbnRyeShjb21tYW5kLCByZXN1bHQpOworCWlmIChyZXN1bHRbMF0gIT0gSUFQX1JFVF9DTURfU1VDQ0VTUykgeworCQlwcmludGYoIklBUCBwcmVwYXJlIGZhaWxlZFxuIik7CisJCXJldHVybiBFUlJfUFJPVEVDVEVEOworCX0KKworCWNvbW1hbmRbMF0gPSBJQVBfQ01EX0VSQVNFOworCWNvbW1hbmRbMV0gPSBzX2ZpcnN0OworCWNvbW1hbmRbMl0gPSBzX2xhc3Q7CisJY29tbWFuZFszXSA9IENGR19TWVNfQ0xLX0ZSRVEgPj4gMTA7CisJaWFwX2VudHJ5KGNvbW1hbmQsIHJlc3VsdCk7CisJaWYgKHJlc3VsdFswXSAhPSBJQVBfUkVUX0NNRF9TVUNDRVNTKSB7CisJCXByaW50ZigiSUFQIGVyYXNlIGZhaWxlZFxuIik7CisJCXJldHVybiBFUlJfUFJPVEVDVEVEOworCX0KKworCWlmIChmbGFnKQorCQllbmFibGVfaW50ZXJydXB0cygpOworCisJcmV0dXJuIEVSUl9PSzsKK30KKworaW50IGxwYzIyOTJfd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgKiBzcmMsIHVsb25nIGFkZHIsCisJCQl1bG9uZyBjbnQpCit7CisJaW50IGZpcnN0X2NvcHlfc2l6ZTsKKwlpbnQgbGFzdF9jb3B5X3NpemU7CisJaW50IGZpcnN0X2Jsb2NrOworCWludCBsYXN0X2Jsb2NrOworCWludCBuYnJfbWlkX2Jsb2NrczsKKwl1Y2hhciBtZW1tYXBfdmFsdWU7CisJdWxvbmcgaTsKKwl1Y2hhciogc3JjX29yZzsKKwl1Y2hhciogZHN0X29yZzsKKwlpbnQgcmV0ID0gRVJSX09LOworCisJc3JjX29yZyA9IHNyYzsKKwlkc3Rfb3JnID0gKHVjaGFyKilhZGRyOworCisJZmlyc3RfYmxvY2sgPSBhZGRyIC8gNTEyOworCWxhc3RfYmxvY2sgPSAoYWRkciArIGNudCkgLyA1MTI7CisJbmJyX21pZF9ibG9ja3MgPSBsYXN0X2Jsb2NrIC0gZmlyc3RfYmxvY2sgLSAxOworCisJZmlyc3RfY29weV9zaXplID0gNTEyIC0gKGFkZHIgJSA1MTIpOworCWxhc3RfY29weV9zaXplID0gKGFkZHIgKyBjbnQpICUgNTEyOworCisJZGVidWcoIlxuY29weSBmaXJzdCBibG9jazogKDEpICVsWCAtPiAlbFggMHgyMDAgYnl0ZXMsICIKKwkJIigyKSAlbFggLT4gJWxYIDB4JVggYnl0ZXMsICgzKSAlbFggLT4gJWxYIDB4MjAwIGJ5dGVzXG4iLAorCSh1bG9uZykoZmlyc3RfYmxvY2sgKiA1MTIpLAorCSh1bG9uZylDT1BZX0JVRkZFUl9MT0NBVElPTiwKKwkodWxvbmcpc3JjLAorCSh1bG9uZykoQ09QWV9CVUZGRVJfTE9DQVRJT04gKyA1MTIgLSBmaXJzdF9jb3B5X3NpemUpLAorCWZpcnN0X2NvcHlfc2l6ZSwKKwkodWxvbmcpQ09QWV9CVUZGRVJfTE9DQVRJT04sCisJKHVsb25nKShmaXJzdF9ibG9jayAqIDUxMikpOworCisJLyogY29weSBmaXJzdCBibG9jayAqLworCW1lbWNweSgodm9pZCopQ09QWV9CVUZGRVJfTE9DQVRJT04sCisJCSh2b2lkKikoZmlyc3RfYmxvY2sgKiA1MTIpLCA1MTIpOworCW1lbWNweSgodm9pZCopKENPUFlfQlVGRkVSX0xPQ0FUSU9OICsgNTEyIC0gZmlyc3RfY29weV9zaXplKSwKKwkJc3JjLCBmaXJzdF9jb3B5X3NpemUpOworCWxwYzIyOTJfY29weV9idWZmZXJfdG9fZmxhc2goaW5mbywgZmlyc3RfYmxvY2sgKiA1MTIpOworCXNyYyArPSBmaXJzdF9jb3B5X3NpemU7CisJYWRkciArPSBmaXJzdF9jb3B5X3NpemU7CisKKwkvKiBjb3B5IG1pZGRsZSBibG9ja3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmJyX21pZF9ibG9ja3M7IGkrKykgeworCQlkZWJ1ZygiY29weSBtaWRkbGUgYmxvY2s6ICVsWCAtPiAlbFggNTEyIGJ5dGVzLCAiCisJCSIlbFggLT4gJWxYIDUxMiBieXRlc1xuIiwKKwkJKHVsb25nKXNyYywKKwkJKHVsb25nKUNPUFlfQlVGRkVSX0xPQ0FUSU9OLAorCQkodWxvbmcpQ09QWV9CVUZGRVJfTE9DQVRJT04sCisJCSh1bG9uZylhZGRyKTsKKworCQltZW1jcHkoKHZvaWQqKUNPUFlfQlVGRkVSX0xPQ0FUSU9OLCBzcmMsIDUxMik7CisJCWxwYzIyOTJfY29weV9idWZmZXJfdG9fZmxhc2goaW5mbywgYWRkcik7CisJCXNyYyArPSA1MTI7CisJCWFkZHIgKz0gNTEyOworCX0KKworCisJaWYgKGxhc3RfY29weV9zaXplID4gMCkgeworCQlkZWJ1ZygiY29weSBsYXN0IGJsb2NrOiAoMSkgJWxYIC0+ICVsWCAweDIwMCBieXRlcywgIgorCQkiKDIpICVsWCAtPiAlbFggMHglWCBieXRlcywgKDMpICVsWCAtPiAlbFggeDIwMCBieXRlc1xuIiwKKwkJKHVsb25nKShsYXN0X2Jsb2NrICogNTEyKSwKKwkJKHVsb25nKUNPUFlfQlVGRkVSX0xPQ0FUSU9OLAorCQkodWxvbmcpc3JjLAorCQkodWxvbmcpKENPUFlfQlVGRkVSX0xPQ0FUSU9OKSwKKwkJbGFzdF9jb3B5X3NpemUsCisJCSh1bG9uZylDT1BZX0JVRkZFUl9MT0NBVElPTiwKKwkJKHVsb25nKWFkZHIpOworCisJCS8qIGNvcHkgbGFzdCBibG9jayAqLworCQltZW1jcHkoKHZvaWQqKUNPUFlfQlVGRkVSX0xPQ0FUSU9OLAorCQkJKHZvaWQqKShsYXN0X2Jsb2NrICogNTEyKSwgNTEyKTsKKwkJbWVtY3B5KCh2b2lkKilDT1BZX0JVRkZFUl9MT0NBVElPTiwKKwkJCXNyYywgbGFzdF9jb3B5X3NpemUpOworCQlscGMyMjkyX2NvcHlfYnVmZmVyX3RvX2ZsYXNoKGluZm8sIGFkZHIpOworCX0KKworCS8qIHZlcmlmeSB3cml0ZSAqLworCW1lbW1hcF92YWx1ZSA9IEdFVDgoTUVNTUFQKTsKKworCWRpc2FibGVfaW50ZXJydXB0cygpOworCisJUFVUOChNRU1NQVAsIDAxKTsJCS8qIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgaW5pdGlhbCA2NAorCQkJCQkJCSAgIGJ5dGVzIGFyZSB0YWtlbiBmcm9tIGZsYXNoIHdoZW4gd2UKKwkJCQkJCQkgICBkbyB0aGUgY29tcGFyZSAqLworCisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCWlmICgqZHN0X29yZyAhPSAqc3JjX29yZyl7CisJCQlwcmludGYoIldyaXRlIGZhaWxlZC4gQnl0ZSAlbFggZGlmZmVyc1xuIiwgaSk7CisJCQlyZXQgPSBFUlJfUFJPR19FUlJPUjsKKwkJCWJyZWFrOworCQl9CisJCWRzdF9vcmcrKzsKKwkJc3JjX29yZysrOworCX0KKworCVBVVDgoTUVNTUFQLCBtZW1tYXBfdmFsdWUpOworCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbHBjMjI5MnNvZGltbS9pYXBfZW50cnkuUyBiL2NwdS9hcm03MjB0L2xwYzIyOTIvaWFwX2VudHJ5LlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL2xwYzIyOTJzb2RpbW0vaWFwX2VudHJ5LlMKcmVuYW1lIHRvIGNwdS9hcm03MjB0L2xwYzIyOTIvaWFwX2VudHJ5LlMKZGlmZiAtLWdpdCBhL2JvYXJkL2xwYzIyOTJzb2RpbW0vbW1jLmMgYi9jcHUvYXJtNzIwdC9scGMyMjkyL21tYy5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGJvYXJkL2xwYzIyOTJzb2RpbW0vbW1jLmMKcmVuYW1lIHRvIGNwdS9hcm03MjB0L2xwYzIyOTIvbW1jLmMKaW5kZXggMWMwOTIyZi4uZmQ3ZjE0OWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2xwYzIyOTJzb2RpbW0vbW1jLmMKKysrIGIvY3B1L2FybTcyMHQvbHBjMjI5Mi9tbWMuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPHBhcnQuaD4KICNpbmNsdWRlIDxmYXQuaD4KICNpbmNsdWRlICJtbWNfaHcuaCIKLSNpbmNsdWRlICJzcGkuaCIKKyNpbmNsdWRlIDxhc20vYXJjaC9zcGkuaD4KIAogI2lmZGVmIENPTkZJR19NTUMKIApAQCAtNDQsNyArNDQsNyBAQAogdW5zaWduZWQgbG9uZyBtbWNfYmxvY2tfcmVhZChpbnQgZGV2LAogCQkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJICAgICBsYmFpbnRfdCBibGtjbnQsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgKmJ1ZmZlcikKKwkJCSAgICAgdm9pZCAqYnVmZmVyKQogewogCXVuc2lnbmVkIGxvbmcgcmMgPSAwOwogCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWJ1ZmZlcjsKQEAgLTEwMSw2ICsxMDEsOSBAQAogCQlwcmludGYoIm1tY19pbml0XG4iKTsKIAogCXNwaV9pbml0KCk7CisJLyogdGhpcyBtZWVkcyB0byBiZSBkb25lIHR3aWNlICovCisJbW1jX2h3X2luaXQoKTsKKwl1ZGVsYXkoMTAwMCk7CiAJbW1jX2h3X2luaXQoKTsKIAogCW1tY19od19nZXRfcGFyYW1ldGVycygpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbHBjMjI5MnNvZGltbS9tbWNfaHcuYyBiL2NwdS9hcm03MjB0L2xwYzIyOTIvbW1jX2h3LmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gYm9hcmQvbHBjMjI5MnNvZGltbS9tbWNfaHcuYwpyZW5hbWUgdG8gY3B1L2FybTcyMHQvbHBjMjI5Mi9tbWNfaHcuYwppbmRleCAzMWYyYTc5Li5iNGRjNGE2IDEwMDY0NAotLS0gYS9ib2FyZC9scGMyMjkyc29kaW1tL21tY19ody5jCisrKyBiL2NwdS9hcm03MjB0L2xwYzIyOTIvbW1jX2h3LmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgInNwaS5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL3NwaS5oPgogCiAjZGVmaW5lIE1NQ19FbmFibGUoKSBQVVQzMihJTzFDTFIsIDFsIDw8IDIyKQogI2RlZmluZSBNTUNfRGlzYWJsZSgpIFBVVDMyKElPMVNFVCwgMWwgPDwgMjIpCmRpZmYgLS1naXQgYS9ib2FyZC9scGMyMjkyc29kaW1tL21tY19ody5oIGIvY3B1L2FybTcyMHQvbHBjMjI5Mi9tbWNfaHcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvbHBjMjI5MnNvZGltbS9tbWNfaHcuaApyZW5hbWUgdG8gY3B1L2FybTcyMHQvbHBjMjI5Mi9tbWNfaHcuaApkaWZmIC0tZ2l0IGEvYm9hcmQvbHBjMjI5MnNvZGltbS9zcGkuYyBiL2NwdS9hcm03MjB0L2xwYzIyOTIvc3BpLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYm9hcmQvbHBjMjI5MnNvZGltbS9zcGkuYwpyZW5hbWUgdG8gY3B1L2FybTcyMHQvbHBjMjI5Mi9zcGkuYwppbmRleCA0YmExNDY4Li5kMjk2YmRhIDEwMDY0NAotLS0gYS9ib2FyZC9scGMyMjkyc29kaW1tL3NwaS5jCisrKyBiL2NwdS9hcm03MjB0L2xwYzIyOTIvc3BpLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgInNwaS5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL3NwaS5oPgogCiB1bnNpZ25lZCBsb25nIHNwaV9mbGFnczsKIHVuc2lnbmVkIGNoYXIgc3BpX2lkbGUgPSAweDAwOwpkaWZmIC0tZ2l0IGEvY3B1L2l4cC9ucGUvTWFrZWZpbGUgYi9jcHUvaXhwL25wZS9NYWtlZmlsZQppbmRleCA0ZGUzNGZkLi43ZjAyMGI1IDEwMDY0NAotLS0gYS9jcHUvaXhwL25wZS9NYWtlZmlsZQorKysgYi9jcHUvaXhwL25wZS9NYWtlZmlsZQpAQCAtODcsNyArODcsNyBAQAogCiBhbGw6CSQoTElCKQogCi0kKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQorJChMSUIpOgkkKE9CSlMpCiAJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9taWNyb2JsYXplL01ha2VmaWxlIGIvY3B1L21pY3JvYmxhemUvTWFrZWZpbGUKaW5kZXggZGIxYWZhNS4uOWQ1NDIwMSAxMDA2NDQKLS0tIGEvY3B1L21pY3JvYmxhemUvTWFrZWZpbGUKKysrIGIvY3B1L21pY3JvYmxhemUvTWFrZWZpbGUKQEAgLTI2LDcgKzI2LDcgQEAKIExJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubwotU09CSlMJPSBkY2FjaGUubyBpY2FjaGUubyBpcnEubyBkaXNhYmxlX2ludC5vIGVuYWJsZV9pbnQubworU09CSlMJPSBpcnEubwogQ09CSlMJPSBjcHUubyBpbnRlcnJ1cHRzLm8gY2FjaGUubyBleGNlcHRpb24ubyB0aW1lci5vCiAKIFNSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKZGlmZiAtLWdpdCBhL2NwdS9taWNyb2JsYXplL2NhY2hlLmMgYi9jcHUvbWljcm9ibGF6ZS9jYWNoZS5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZmMzODhlYi4uNGYzNmE4NAotLS0gYS9jcHUvbWljcm9ibGF6ZS9jYWNoZS5jCisrKyBiL2NwdS9taWNyb2JsYXplL2NhY2hlLmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQ0FDSEUpCiAKQEAgLTQ1LDQgKzQ2LDIwIEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJhbmQgJTAsJTAsJTEiOjoiciIgKGkpLCAiciIgKG1hc2spOiJtZW1vcnkiKTsKIAlyZXR1cm4gaTsKIH0KKwordm9pZAlpY2FjaGVfZW5hYmxlICh2b2lkKSB7CisJTVNSU0VUKDB4MjApOworfQorCit2b2lkCWljYWNoZV9kaXNhYmxlKHZvaWQpIHsKKwlNU1JDTFIoMHgyMCk7Cit9CisKK3ZvaWQJZGNhY2hlX2VuYWJsZSAodm9pZCkgeworCU1TUlNFVCgweDgwKTsKK30KKwordm9pZAlkY2FjaGVfZGlzYWJsZSh2b2lkKSB7CisJTVNSQ0xSKDB4ODApOworfQogI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbWljcm9ibGF6ZS9kY2FjaGUuUyBiL2NwdS9taWNyb2JsYXplL2RjYWNoZS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWY5NjcxLi4wMDAwMDAwCi0tLSBhL2NwdS9taWNyb2JsYXplL2RjYWNoZS5TCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNyBNaWNoYWwgU2ltZWsKLSAqCi0gKiBNaWNoYWwgIFNJTUVLIDxtb25zdHJAbW9uc3RyLmV1PgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQkudGV4dAotCS5nbG9ibAlkY2FjaGVfZW5hYmxlCi0JLmVudAlkY2FjaGVfZW5hYmxlCi0JLmFsaWduCTIKLWRjYWNoZV9lbmFibGU6Ci0JLyogTWFrZSBzcGFjZSBvbiBzdGFjayBmb3IgYSB0ZW1wb3JhcnkgKi8KLQlhZGRpCXIxLCByMSwgLTQKLQkvKiBTYXZlIHJlZ2lzdGVyIHIxMiAqLwotCXN3aQlyMTIsIHIxLCAwCi0JLyogUmVhZCB0aGUgTVNSIHJlZ2lzdGVyICovCi0JbWZzCXIxMiwgcm1zcgotCS8qIFNldCB0aGUgaW5zdHJ1Y3Rpb24gZW5hYmxlIGJpdCAqLwotCW9yaQlyMTIsIHIxMiwgMHg4MAotCS8qIFNhdmUgdGhlIE1TUiByZWdpc3RlciAqLwotCW10cwlybXNyLCByMTIKLQkvKiBMb2FkIHJlZ2lzdGVyIHIxMiAqLwotCWx3aQlyMTIsIHIxLCAwCi0JLyogUmV0dXJuICovCi0JcnRzZAlyMTUsIDgKLQkvKiBVcGRhdGUgc3RhY2sgaW4gdGhlIGRlbGF5IHNsb3QgKi8KLQlhZGRpCXIxLCByMSwgNAotCS5lbmQJZGNhY2hlX2VuYWJsZQotCi0JLnRleHQKLQkuZ2xvYmwJZGNhY2hlX2Rpc2FibGUKLQkuZW50CWRjYWNoZV9kaXNhYmxlCi0JLmFsaWduCTIKLWRjYWNoZV9kaXNhYmxlOgotCS8qIE1ha2Ugc3BhY2Ugb24gc3RhY2sgZm9yIGEgdGVtcG9yYXJ5ICovCi0JYWRkaQlyMSwgcjEsIC00Ci0JLyogU2F2ZSByZWdpc3RlciByMTIgKi8KLQlzd2kJcjEyLCByMSwgMAotCS8qIFJlYWQgdGhlIE1TUiByZWdpc3RlciAqLwotCW1mcwlyMTIsIHJtc3IKLQkvKiBDbGVhciB0aGUgZGF0YSBjYWNoZSBlbmFibGUgYml0ICovCi0JYW5kaQlyMTIsIHIxMiwgfjB4ODAKLQkvKiBTYXZlIHRoZSBNU1IgcmVnaXN0ZXIgKi8KLQltdHMJcm1zciwgcjEyCi0JLyogTG9hZCByZWdpc3RlciByMTIgKi8KLQlsd2kJcjEyLCByMSwgMAotCS8qIFJldHVybiAqLwotCXJ0c2QJcjE1LCA4Ci0JLyogVXBkYXRlIHN0YWNrIGluIHRoZSBkZWxheSBzbG90ICovCi0JYWRkaQlyMSwgcjEsIDQKLQkuZW5kCWRjYWNoZV9kaXNhYmxlCmRpZmYgLS1naXQgYS9jcHUvbWljcm9ibGF6ZS9kaXNhYmxlX2ludC5TIGIvY3B1L21pY3JvYmxhemUvZGlzYWJsZV9pbnQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVjZDc5NS4uMDAwMDAwMAotLS0gYS9jcHUvbWljcm9ibGF6ZS9kaXNhYmxlX2ludC5TCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNyBNaWNoYWwgU2ltZWsKLSAqCi0gKiBNaWNoYWwgIFNJTUVLIDxtb25zdHJAbW9uc3RyLmV1PgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotCS50ZXh0Ci0JLmdsb2JsCW1pY3JvYmxhemVfZGlzYWJsZV9pbnRlcnJ1cHRzCi0JLmVudAltaWNyb2JsYXplX2Rpc2FibGVfaW50ZXJydXB0cwotCS5hbGlnbgkyCi1taWNyb2JsYXplX2Rpc2FibGVfaW50ZXJydXB0czoKLQkjTWFrZSBzcGFjZSBvbiBzdGFjayBmb3IgYSB0ZW1wb3JhcnkKLQlhZGRpCXIxLCByMSwgLTQKLQkjU2F2ZSByZWdpc3RlciByMTIKLQlzd2kJcjEyLCByMSwgMAotCSNSZWFkIHRoZSBNU1IgcmVnaXN0ZXIKLQltZnMJcjEyLCBybXNyCi0JI0NsZWFyIHRoZSBpbnRlcnJ1cHQgZW5hYmxlIGJpdAotCWFuZGkJcjEyLCByMTIsIH4yCi0JI1NhdmUgdGhlIE1TUiByZWdpc3RlcgotCW10cwlybXNyLCByMTIKLQkjTG9hZCByZWdpc3RlciByMTIKLQlsd2kJcjEyLCByMSwgMAotCSNSZXR1cm4KLQlydHNkCXIxNSwgOAotCSNVcGRhdGUgc3RhY2sgaW4gdGhlIGRlbGF5IHNsb3QKLQlhZGRpCXIxLCByMSwgNAotCS5lbmQJbWljcm9ibGF6ZV9kaXNhYmxlX2ludGVycnVwdHMKZGlmZiAtLWdpdCBhL2NwdS9taWNyb2JsYXplL2V4Y2VwdGlvbi5jIGIvY3B1L21pY3JvYmxhemUvZXhjZXB0aW9uLmMKaW5kZXggYjEzNWFjYi4uZDc2YjA1YSAxMDA2NDQKLS0tIGEvY3B1L21pY3JvYmxhemUvZXhjZXB0aW9uLmMKKysrIGIvY3B1L21pY3JvYmxhemUvZXhjZXB0aW9uLmMKQEAgLTIzLDE1ICsyMywxNiBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+CiAKIHZvaWQgX2h3X2V4Y2VwdGlvbl9oYW5kbGVyICh2b2lkKQogewogCWludCBhZGRyZXNzID0gMDsKIAlpbnQgc3RhdGUgPSAwOwogCS8qIGxvYWRpbmcgYWRkcmVzcyBvZiBleGNlcHRpb24gRUFSICovCi0JX19hc21fXyBfX3ZvbGF0aWxlICgibWZzICUwLHJlYXIiOjoiciIgKGFkZHJlc3MpOiJtZW1vcnkiKTsKKwlNRlMgKGFkZHJlc3MsIHJlYXIpOwogCS8qIGxvYWRpbmcgZXhjZXRwaW9uIHN0YXRlIHJlZ2lzdGVyIEVTUiAqLwotCV9fYXNtX18gX192b2xhdGlsZSAoIm1mcyAlMCxyZXNyIjo6InIiIChzdGF0ZSk6Im1lbW9yeSIpOworCU1GUyAoc3RhdGUsIHJlc3IpOwogCXByaW50ZiAoIkhhcmR3YXJlIGV4Y2VwdGlvbiBhdCAweCV4IGFkZHJlc3NcbiIsIGFkZHJlc3MpOwogCXN3aXRjaCAoc3RhdGUgJiAweDFmKSB7CS8qIG1hc2sgb24gZXhjZXB0aW9uIGNhdXNlICovCiAJY2FzZSAweDE6CkBAIC00OSw2ICs1MCwxMSBAQAogCWNhc2UgMHg1OgogCQlwdXRzICgiRGl2aWRlIGJ5IHplcm8gZXhjZXB0aW9uXG4iKTsKIAkJYnJlYWs7CisjaWZkZWYgTUlDUk9CTEFaRV9WNQorCWNhc2UgMHgxMDAwOgorCQlwdXRzICgiRXhjZXB0aW9uIGluIGRlbGF5IHNsb3RcbiIpOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXB1dHMgKCJVbmRlZmluZWQgY2F1c2VcbiIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2NwdS9taWNyb2JsYXplL2ljYWNoZS5TIGIvY3B1L21pY3JvYmxhemUvaWNhY2hlLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1OTQwZDEuLjAwMDAwMDAKLS0tIGEvY3B1L21pY3JvYmxhemUvaWNhY2hlLlMKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDA3IE1pY2hhbCBTaW1lawotICoKLSAqIE1pY2hhbCAgU0lNRUsgPG1vbnN0ckBtb25zdHIuZXU+Ci0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0JLnRleHQKLQkuZ2xvYmwJaWNhY2hlX2VuYWJsZQotCS5lbnQJaWNhY2hlX2VuYWJsZQotCS5hbGlnbgkyCi1pY2FjaGVfZW5hYmxlOgotCS8qIE1ha2Ugc3BhY2Ugb24gc3RhY2sgZm9yIGEgdGVtcG9yYXJ5ICovCi0JYWRkaQlyMSwgcjEsIC00Ci0JLyogU2F2ZSByZWdpc3RlciByMTIgKi8KLQlzd2kJcjEyLCByMSwgMAotCS8qIFJlYWQgdGhlIE1TUiByZWdpc3RlciAqLwotCW1mcwlyMTIsIHJtc3IKLQkvKiBTZXQgdGhlIGluc3RydWN0aW9uIGVuYWJsZSBiaXQgKi8KLQlvcmkJcjEyLCByMTIsIDB4MjAKLQkvKiBTYXZlIHRoZSBNU1IgcmVnaXN0ZXIgKi8KLQltdHMJcm1zciwgcjEyCi0JLyogTG9hZCByZWdpc3RlciByMTIgKi8KLQlsd2kJcjEyLCByMSwgMAotCS8qIFJldHVybiAqLwotCXJ0c2QJcjE1LCA4Ci0JLyogVXBkYXRlIHN0YWNrIGluIHRoZSBkZWxheSBzbG90ICovCi0JYWRkaQlyMSwgcjEsIDQKLQkuZW5kCWljYWNoZV9lbmFibGUKLQotCS50ZXh0Ci0JLmdsb2JsCWljYWNoZV9kaXNhYmxlCi0JLmVudAlpY2FjaGVfZGlzYWJsZQotCS5hbGlnbgkyCi1pY2FjaGVfZGlzYWJsZToKLQkvKiBNYWtlIHNwYWNlIG9uIHN0YWNrIGZvciBhIHRlbXBvcmFyeSAqLwotCWFkZGkJcjEsIHIxLCAtNAotCS8qIFNhdmUgcmVnaXN0ZXIgcjEyICovCi0Jc3dpCXIxMiwgcjEsIDAKLQkvKiBSZWFkIHRoZSBNU1IgcmVnaXN0ZXIgKi8KLQltZnMJcjEyLCBybXNyCi0JLyogQ2xlYXIgdGhlIGluc3RydWN0aW9uIGVuYWJsZSBiaXQgKi8KLQlhbmRpCXIxMiwgcjEyLCB+MHgyMAotCS8qIFNhdmUgdGhlIE1TUiByZWdpc3RlciAqLwotCW10cwlybXNyLCByMTIKLQkvKiBMb2FkIHJlZ2lzdGVyIHIxMiAqLwotCWx3aQlyMTIsIHIxLCAwCi0JLyogUmV0dXJuICovCi0JcnRzZAlyMTUsIDgKLQkvKiBVcGRhdGUgc3RhY2sgaW4gdGhlIGRlbGF5IHNsb3QgKi8KLQlhZGRpCXIxLCByMSwgNAotCS5lbmQJaWNhY2hlX2Rpc2FibGUKZGlmZiAtLWdpdCBhL2NwdS9taWNyb2JsYXplL2ludGVycnVwdHMuYyBiL2NwdS9taWNyb2JsYXplL2ludGVycnVwdHMuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDJkYjg0N2MuLmI2MTE1M2YKLS0tIGEvY3B1L21pY3JvYmxhemUvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9taWNyb2JsYXplL2ludGVycnVwdHMuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxhc20vbWljcm9ibGF6ZV9pbnRjLmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgogCiAjdW5kZWYgREVCVUdfSU5UCiAKQEAgLTM1LDEyICszNiwxMiBAQAogCiB2b2lkIGVuYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQogewotCW1pY3JvYmxhemVfZW5hYmxlX2ludGVycnVwdHMgKCk7CisJTVNSU0VUKDB4Mik7CiB9CiAKIGludCBkaXNhYmxlX2ludGVycnVwdHMgKHZvaWQpCiB7Ci0JbWljcm9ibGF6ZV9kaXNhYmxlX2ludGVycnVwdHMgKCk7CisJTVNSQ0xSKDB4Mik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4LDYgKzQ5LDEwIEBACiAjaWZkZWYgQ0ZHX1RJTUVSXzAKIGV4dGVybiB2b2lkIHRpbWVyX2luaXQgKHZvaWQpOwogI2VuZGlmCisjaWZkZWYgQ0ZHX0ZTTF8yCitleHRlcm4gdm9pZCBmc2xfaW5pdDIgKHZvaWQpOworI2VuZGlmCisKIAogc3RhdGljIHN0cnVjdCBpcnFfYWN0aW9uIHZlY3NbQ0ZHX0lOVENfMF9OVU1dOwogCkBAIC0xMDYsNyArMTExLDYgQEAKIAkJYWN0LT5jb3VudCA9IDA7CiAJCWVuYWJsZV9vbmVfaW50ZXJydXB0IChpcnEpOwogCX0gZWxzZSB7CQkvKiBkaXNhYmxlICovCi0KIAkJYWN0LT5oYW5kbGVyID0gKGludGVycnVwdF9oYW5kbGVyX3QgKikgZGVmX2hkbHI7CiAJCWFjdC0+YXJnID0gKHZvaWQgKilpcnE7CiAJCWRpc2FibGVfb25lX2ludGVycnVwdCAoaXJxKTsKQEAgLTE0MSwxOCArMTQ1LDIyIEBACiAjaWZkZWYgQ0ZHX1RJTUVSXzAKIAl0aW1lcl9pbml0ICgpOwogI2VuZGlmCisjaWZkZWYgQ0ZHX0ZTTF8yCisJZnNsX2luaXQyICgpOworI2VuZGlmCiAJZW5hYmxlX2ludGVycnVwdHMgKCk7CiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgaW50ZXJydXB0X2hhbmRsZXIgKHZvaWQpCiB7Ci0JaW50IGlycXM7Ci0JaXJxcyA9IChpbnRjLT5pc3IgJiBpbnRjLT5pZXIpOwkvKiBmaW5kIGFjdGl2ZSBpbnRlcnJ1cHQgKi8KLQorCWludCBpcnFzID0gKGludGMtPmlzciAmIGludGMtPmllcik7CS8qIGZpbmQgYWN0aXZlIGludGVycnVwdCAqLworCWludCBpID0gMTsKICNpZmRlZiBERUJVR19JTlQKKwlpbnQgdmFsdWU7CiAJcHJpbnRmICgiSU5UQyBpc3IgJXgsIGllciAleCwgaWFyICV4LCBtZXIgJXhcbiIsIGludGMtPmlzciwgaW50Yy0+aWVyLAogCQlpbnRjLT5pYXIsIGludGMtPm1lcik7CisJUjE0KHZhbHVlKTsKIAlwcmludGYgKCJJbnRlcnJ1cHQgaGFuZGxlciBvbiAleCBsaW5lLCByMTQgJXhcbiIsIGlycXMsIHZhbHVlKTsKICNlbmRpZgogCXN0cnVjdCBpcnFfYWN0aW9uICphY3QgPSB2ZWNzOwpAQCAtMTY1LDE1ICsxNzMsMTkgQEAKICNlbmRpZgogCQkJYWN0LT5oYW5kbGVyIChhY3QtPmFyZyk7CiAJCQlhY3QtPmNvdW50Kys7CisJCQlpbnRjLT5pYXIgPSBpOworCQkJcmV0dXJuOwogCQl9CiAJCWlycXMgPj49IDE7CiAJCWFjdCsrOworCQlpIDw8PSAxOwogCX0KLQlpbnRjLT5pYXIgPSAweEZGRkZGRkZGOwkvKiBlcmFzZSBhbGwgZXZlbnRzICovCi0jaWZkZWYgREVCVUcKKworI2lmZGVmIERFQlVHX0lOVAogCXByaW50ZiAoIkR1bXAgSU5UQyByZWcsIGlzciAleCwgaWVyICV4LCBpYXIgJXgsIG1lciAleFxuIiwgaW50Yy0+aXNyLAogCQlpbnRjLT5pZXIsIGludGMtPmlhciwgaW50Yy0+bWVyKTsKLQlwcmludGYgKCJJbnRlcnJ1cHQgaGFuZGxlciBvbiAleCBsaW5lLCByMTRcbiIsIGlycXMpOworCVIxNCh2YWx1ZSk7CisJcHJpbnRmICgiSW50ZXJydXB0IGhhbmRsZXIgb24gJXggbGluZSwgcjE0ICV4XG4iLCBpcnFzLCB2YWx1ZSk7CiAjZW5kaWYKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21pY3JvYmxhemUvaXJxLlMgYi9jcHUvbWljcm9ibGF6ZS9pcnEuUwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGE0ZTNmYmYuLmUxZmMxOTAKLS0tIGEvY3B1L21pY3JvYmxhemUvaXJxLlMKKysrIGIvY3B1L21pY3JvYmxhemUvaXJxLlMKQEAgLTIzLDYgKzIzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgogCS50ZXh0CiAJLmdsb2JhbCBfaW50ZXJydXB0X2hhbmRsZXIKIF9pbnRlcnJ1cHRfaGFuZGxlcjoKQEAgLTE1MSw2ICsxNTIsMTEgQEAKIAlhZGRpCXIxLCByMSwgNAogCiAJLyogZW5hYmxlX2ludGVycnVwdCAqLworI2lmZGVmIFhJTElOWF9VU0VfTVNSX0lOU1RSCisJbXNyc2V0CXIwLCAyCisjZWxzZQorCS8qIEZJWE1FIHVuc3RhYmxlIGluIHN0cmVzc2VkIG1vZGUgLSB0d28gaXJxcyAqLworCW5vcAogCWFkZGkJcjEsIHIxLCAtNAogCXN3aQlyMTIsIHIxLCAwCiAJbWZzCXIxMiwgcm1zcgpAQCAtMTU5LDYgKzE2NSw3IEBACiAJbHdpCXIxMiwgcjEsIDAKIAlhZGRpCXIxLCByMSwgNAogCW5vcAorI2VuZGlmCiAJYnJhCXIxNAogCW5vcAogCW5vcApkaWZmIC0tZ2l0IGEvY3B1L21pY3JvYmxhemUvc3RhcnQuUyBiL2NwdS9taWNyb2JsYXplL3N0YXJ0LlMKaW5kZXggY2EzYmVmYy4uM2MwMjdmZiAxMDA2NDQKLS0tIGEvY3B1L21pY3JvYmxhemUvc3RhcnQuUworKysgYi9jcHUvbWljcm9ibGF6ZS9zdGFydC5TCkBAIC0xMTcsMyArMTE3LDM2IEBACiAzOgkvKiBqdW1waW5nIHRvIGJvYXJkX2luaXQgKi8KIAlicmFpCWJvYXJkX2luaXQKIDE6CWJyaQkxYgorCisvKgorICogUmVhZCAxNmJpdCBsaXR0bGUgZW5kaWFuCisgKi8KKwkudGV4dAorCS5nbG9iYWwJaW4xNgorCS5lbnQJaW4xNgorCS5hbGlnbgkyCitpbjE2OglsaHUJcjMsIHIwLCByNQorCWJzbGxpCXI0LCByMywgOAorCWJzcmxpCXIzLCByMywgOAorCWFuZGkJcjQsIHI0LCAweGZmZmYKKwlvcglyMywgcjMsIHI0CisJcnRzZAlyMTUsIDgKKwlzZXh0MTYJcjMsIHIzCisJLmVuZAlpbjE2CisKKy8qCisgKiBXcml0ZSAxNmJpdCBsaXR0bGUgZW5kaWFuCisgKiBmaXJzdCBwYXJhbWV0ZXIocjUpIC0gYWRkcmVzcywgc2Vjb25kKHI2KSAtIHNob3J0IHZhbHVlCisgKi8KKwkudGV4dAorCS5nbG9iYWwJb3V0MTYKKwkuZW50CW91dDE2CisJLmFsaWduCTIKK291dDE2Oglic2xsaQlyMywgcjYsIDgKKwlic3JsaQlyNiwgcjYsIDgKKwlhbmRpCXIzLCByMywgMHhmZmZmCisJb3IJcjMsIHIzLCByNgorCXNoCXIzLCByMCwgcjUKKwlydHNkCXIxNSwgOAorCW9yCXIwLCByMCwgcjAKKwkuZW5kCW91dDE2CmRpZmYgLS1naXQgYS9jcHUvbWljcm9ibGF6ZS90aW1lci5jIGIvY3B1L21pY3JvYmxhemUvdGltZXIuYwppbmRleCBiZTRmZDU3Li5hYjFjYjEyIDEwMDY0NAotLS0gYS9jcHUvbWljcm9ibGF6ZS90aW1lci5jCisrKyBiL2NwdS9taWNyb2JsYXplL3RpbWVyLmMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9taWNyb2JsYXplX3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL21pY3JvYmxhemVfaW50Yy5oPgogCiB2b2xhdGlsZSBpbnQgdGltZXN0YW1wID0gMDsKIApAQCAtNDQsOSArNDUsNiBAQAogCiAjaWZkZWYgQ0ZHX0lOVENfMAogI2lmZGVmIENGR19USU1FUl8wCi1leHRlcm4gdm9pZCBpbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyIChpbnQgaXJxLCBpbnRlcnJ1cHRfaGFuZGxlcl90ICogaGRsciwKLQkJCQkgICAgICAgdm9pZCAqYXJnKTsKLQogbWljcm9ibGF6ZV90aW1lcl90ICp0bXIgPSAobWljcm9ibGF6ZV90aW1lcl90ICopIChDRkdfVElNRVJfMF9BRERSKTsKIAogdm9pZCB0aW1lcl9pc3IgKHZvaWQgKmFyZykKZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHh4L2NwdS5jIGIvY3B1L21wYzV4eHgvY3B1LmMKaW5kZXggODEzYWE3OS4uMWVhYzJiYiAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eHgvY3B1LmMKKysrIGIvY3B1L21wYzV4eHgvY3B1LmMKQEAgLTUzLDEyICs1MywxNiBAQAogI2Vsc2UKIAlzdnIgPSBnZXRfc3ZyKCk7CiAJcHZyID0gZ2V0X3B2cigpOwotCXN3aXRjaCAoU1ZSX1ZFUiAoc3ZyKSkgewotCWNhc2UgU1ZSX01QQzUyMDA6Ci0JCXByaW50ZiAoIk1QQzUyMDAiKTsKKworCXN3aXRjaCAocHZyKSB7CisJY2FzZSBQVlJfNTIwMDoKKwkJcHJpbnRmKCJNUEM1MjAwIik7CisJCWJyZWFrOworCWNhc2UgUFZSXzUyMDBCOgorCQlwcmludGYoIk1QQzUyMDBCIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ZiAoIk1QQzUyPz8gIChTVlIgJTA4eCkiLCBzdnIpOworCQlwcmludGYoIlVua25vd24gTVBDNXh4eCIpOwogCQlicmVhazsKIAl9CiAKQEAgLTEyNyw1ICsxMzEsOSBAQAogCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvZXRoZXJuZXRAMzAwMC9tYWMtYWRkcmVzcyIsICZsZW4pOwogCWlmIChwICE9IE5VTEwpCiAJCW1lbWNweShwLCBiZC0+YmlfZW5ldGFkZHIsIDYpOworCisJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9ldGhlcm5ldEAzMDAwL2xvY2FsLW1hYy1hZGRyZXNzIiwgJmxlbik7CisJaWYgKHAgIT0gTlVMTCkKKwkJbWVtY3B5KHAsIGJkLT5iaV9lbmV0YWRkciwgNik7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHh4L2NwdV9pbml0LmMgYi9jcHUvbXBjNXh4eC9jcHVfaW5pdC5jCmluZGV4IDdlNjU4MjEuLmQ3NDQwMzAgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHh4L2NwdV9pbml0LmMKKysrIGIvY3B1L21wYzV4eHgvY3B1X2luaXQuYwpAQCAtMTU2LDIxICsxNTYsMjEgQEAKIAkqKHZ1X2xvbmcgKikoTVBDNVhYWF9YTEJBUkIgKyAweDQwKSB8PSAoMSA8PCAxNSk7CiAJKih2dV9sb25nICopKE1QQzVYWFhfWExCQVJCICsgMHg3MCkgPSBDRkdfU0RSQU1fQkFTRSB8IDB4MWQ7CiAKLSMgaWYgZGVmaW5lZChDRkdfSVBCU1BFRURfMTMzKQorIyBpZiBkZWZpbmVkKENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSykKIAkvKiBNb3Rvcm9sYSByZXBvcnRzIElQQiBzaG91bGQgYmV0dGVyIHJ1biBhdCAxMzMgTUh6LiAqLwogCSoodnVfbG9uZyAqKU1QQzVYWFhfQURERUNSIHw9IDE7CiAJLyogcGNpX2Nsa19zZWwgPSAweDAyLCBpcGJfY2xrX3NlbCA9IDB4MDA7ICovCiAJYWRkZWNyID0gKih2dV9sb25nICopTVBDNVhYWF9DRE1fQ0ZHOwogCWFkZGVjciAmPSB+MHgxMDM7Ci0jICBpZiBkZWZpbmVkKENGR19QQ0lTUEVFRF82NikKKyMgIGlmIGRlZmluZWQoQ0ZHX1BDSUNMS19FUVVBTFNfSVBCQ0xLX0RJVjIpCiAJLyogcGNpX2Nsa19zZWwgPSAweDAxIC0+IElQQl9DTEsvMiAqLwogCWFkZGVjciB8PSAweDAxOwogIyAgZWxzZQogCS8qIHBjaV9jbGtfc2VsID0gMHgwMiAtPiBYTEJfQ0xLLzQgPSBJUEJfQ0xLLzQgKi8KIAlhZGRlY3IgfD0gMHgwMjsKLSMgIGVuZGlmIC8qIENGR19QQ0lTUEVFRF82NiAqLworIyAgZW5kaWYgLyogQ0ZHX1BDSUNMS19FUVVBTFNfSVBCQ0xLX0RJVjIgKi8KIAkqKHZ1X2xvbmcgKilNUEM1WFhYX0NETV9DRkcgPSBhZGRlY3I7Ci0jIGVuZGlmCS8qIENGR19JUEJTUEVFRF8xMzMgKi8KKyMgZW5kaWYJLyogQ0ZHX0lQQkNMS19FUVVBTFNfWExCQ0xLICovCiAJLyogQ29uZmlndXJlIHRoZSBYTEIgQXJiaXRlciAqLwogCSoodnVfbG9uZyAqKU1QQzVYWFhfWExCQVJCX01QUklFTiA9IDB4ZmY7CiAJKih2dV9sb25nICopTVBDNVhYWF9YTEJBUkJfTVBSSVZBTCA9IDB4MTExMTExMTE7CmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4eC9mZWMuYyBiL2NwdS9tcGM1eHh4L2ZlYy5jCmluZGV4IGU1OWJkODUuLjgxMzYzNjYgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHh4L2ZlYy5jCisrKyBiL2NwdS9tcGM1eHh4L2ZlYy5jCkBAIC00MjgsNiArNDI4LDEzIEBACiAJICovCiAJZmVjLT5ldGgtPmltYXNrID0gMHgwMDAwMDAwMDsKIAorLyoKKyAqIEluIG9yaWdpbmFsIFByb21lc3MtcHJvdmlkZWQgY29kZSBQSFkgaW5pdGlhbGl6YXRpb24gaXMgZGlzYWJsZWQgd2l0aCB0aGUKKyAqIGZvbGxvd2luZyBjb21tZW50OiAiUGh5IGluaXRpYWxpemF0aW9uIGlzIERJU0FCTEVEIGZvciBub3cuICBUaGVyZSB3YXMgYQorICogcHJvYmxlbSB3aXRoIHJ1bm5pbmcgMTAwIE1icHMgb24gUFJPIGJvYXJkIi4gVGh1cyB3ZSB0ZW1wb3JhcmlseSBkaXNhYmxlCisgKiBQSFkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBNb3Rpb24tUFJPIGJvYXJkLCB1bnRpbCBhIHByb3BlciBmaXggaXMgZm91bmQuCisgKi8KKwogCWlmIChmZWMtPnhjdl90eXBlICE9IFNFVkVOV0lSRSkgewogCQkvKgogCQkgKiBTZXQgTUlJX1NQRUVEID0gKDEvKG1paV9zcGVlZCAqIDIpKSAqIFN5c3RlbSBDbG9jawpkaWZmIC0tZ2l0IGEvY3B1L21wYzgzeHgvTWFrZWZpbGUgYi9jcHUvbXBjODN4eC9NYWtlZmlsZQppbmRleCA0YjlkY2M4Li5iYjk2Zjc3IDEwMDY0NAotLS0gYS9jcHUvbXBjODN4eC9NYWtlZmlsZQorKysgYi9jcHUvbXBjODN4eC9NYWtlZmlsZQpAQCAtMjksNyArMjksNyBAQAogCiBTVEFSVAk9IHN0YXJ0Lm8KIENPQkpTCT0gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIHNwZWVkLm8gaW50ZXJydXB0cy5vIFwKLQkgIHNwZF9zZHJhbS5vIHFlX2lvLm8KKwkgIHNwZF9zZHJhbS5vIHFlX2lvLm8gcGNpLm8KIAogU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCmRpZmYgLS1naXQgYS9jcHUvbXBjODN4eC9jcHUuYyBiL2NwdS9tcGM4M3h4L2NwdS5jCmluZGV4IGU5MzRiYTYuLmUwNzhmMjcgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4M3h4L2NwdS5jCisrKyBiL2NwdS9tcGM4M3h4L2NwdS5jCkBAIC01MiwxMyArNTIsMjYgQEAKIAogCWltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCi0JaWYgKChwdnIgJiAweEZGRkYwMDAwKSAhPSBQVlJfODN4eCkgewotCQlwdXRzKCJOb3QgTVBDODN4eCBGYW1pbHkhISFcbiIpOwotCQlyZXR1cm4gLTE7CisJcHV0cygiQ1BVOiAgICIpOworCisJc3dpdGNoIChwdnIgJiAweGZmZmYwMDAwKSB7CisJCWNhc2UgUFZSX0UzMDBDMToKKwkJCXByaW50ZigiZTMwMGMxLCAiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUFZSX0UzMDBDMjoKKwkJCXByaW50ZigiZTMwMGMyLCAiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUFZSX0UzMDBDMzoKKwkJCXByaW50ZigiZTMwMGMzLCAiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGYoIlVua25vd24gY29yZSwgIik7CiAJfQogCiAJc3ByaWRyID0gaW1tci0+c3lzY29uZi5zcHJpZHI7Ci0JcHV0cygiQ1BVOiAiKTsKIAlzd2l0Y2goc3ByaWRyKSB7CiAJY2FzZSBTUFJfODM0OUVfUkVWMTA6CiAJY2FzZSBTUFJfODM0OUVfUkVWMTE6CkBAIC0xMjQsNiArMTM3LDE4IEBACiAJY2FzZSBTUFJfODMyMV9SRVYxMToKIAkJcHV0cygiTVBDODMyMSwgIik7CiAJCWJyZWFrOworCWNhc2UgU1BSXzgzMTFfUkVWMTA6CisJCXB1dHMoIk1QQzgzMTEsICIpOworCQlicmVhazsKKwljYXNlIFNQUl84MzExRV9SRVYxMDoKKwkJcHV0cygiTVBDODMxMUUsICIpOworCQlicmVhazsKKwljYXNlIFNQUl84MzEzX1JFVjEwOgorCQlwdXRzKCJNUEM4MzEzLCAiKTsKKwkJYnJlYWs7CisJY2FzZSBTUFJfODMxM0VfUkVWMTA6CisJCXB1dHMoIk1QQzgzMTNFLCAiKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHV0cygiUmV2OiBVbmtub3duIHJldmlzaW9uIG51bWJlci5cbldhcm5pbmc6IFVuc3VwcG9ydGVkIGNwdSByZXZpc2lvbiFcbiIpOwogCQlyZXR1cm4gMDsKQEAgLTEzMywxMCArMTU4LDEyIEBACiAJLyogTXVsdGlwbGUgcmV2aXNvbnMgb2YgODM0eCBwcm9jZXNzb3JzIG1heSBoYXZlIHRoZSBzYW1lIFNQUklEUiB2YWx1ZS4KIAkgKiBTbyB1c2UgUFZSIHRvIGlkZW50aWZ5IHRoZSByZXZpc2lvbiBudW1iZXIuCiAJICovCi0JcHJpbnRmKCJSZXY6ICUwMnggYXQgJXMgTUh6XG4iLCBQVlJfTUFKKHB2cik8PDQgfCBQVlJfTUlOKHB2ciksIHN0cm1oeihidWYsIGNsb2NrKSk7CisJcHJpbnRmKCJSZXY6ICUwMnggYXQgJXMgTUh6IiwgUFZSX01BSihwdnIpPDw0IHwgUFZSX01JTihwdnIpLCBzdHJtaHooYnVmLCBjbG9jaykpOwogI2Vsc2UKLQlwcmludGYoIlJldjogJTAyeCBhdCAlcyBNSHpcbiIsIHNwcmlkciAmIDB4MDAwMEZGRkYsIHN0cm1oeihidWYsIGNsb2NrKSk7CisJcHJpbnRmKCJSZXY6ICUwMnggYXQgJXMgTUh6Iiwgc3ByaWRyICYgMHgwMDAwRkZGRiwgc3RybWh6KGJ1ZiwgY2xvY2spKTsKICNlbmRpZgorCXByaW50ZigiLCBDU0I6ICU0ZCBNSHpcbiIsIGdkLT5jc2JfY2xrIC8gMTAwMDAwMCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvY3B1L21wYzgzeHgvcGNpLmMgYi9jcHUvbXBjODN4eC9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODVkNjEyCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L21wYzgzeHgvcGNpLmMKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIDIwMDcKKyAqCisgKiBBdXRob3I6IFNjb3R0IFdvb2QgPHNjb3R0d29vZEBmcmVlc2NhbGUuY29tPiwKKyAqIHdpdGggc29tZSBiaXRzIGZyb20gb2xkZXIgYm9hcmQtc3BlY2lmaWMgUENJIGluaXRpYWxpemF0aW9uLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxwY2kuaD4KKyNpbmNsdWRlIDxmdF9idWlsZC5oPgorI2luY2x1ZGUgPGFzbS9tcGM4MzQ5X3BjaS5oPgorCisjaWZkZWYgQ09ORklHXzgzWFhfR0VORVJJQ19QQ0kKKyNkZWZpbmUgTUFYX0JVU0VTIDIKKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgcGNpX2hvc2VbTUFYX0JVU0VTXTsKK3N0YXRpYyBpbnQgcGNpX251bV9idXNlczsKKworc3RhdGljIHZvaWQgcGNpX2luaXRfYnVzKGludCBidXMsIHN0cnVjdCBwY2lfcmVnaW9uICpyZWcpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9ICh2b2xhdGlsZSBpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgcG90ODN4eF90ICpwb3QgPSBpbW1yLT5pb3MucG90OworCXZvbGF0aWxlIHBjaWN0cmw4M3h4X3QgKnBjaV9jdHJsID0gJmltbXItPnBjaV9jdHJsW2J1c107CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gJnBjaV9ob3NlW2J1c107CisJdTMyIGRldjsKKwl1MTYgcmVnMTY7CisJaW50IGk7CisKKwlpZiAoYnVzID09IDEpCisJCXBvdCArPSAzOworCisJLyogU2V0dXAgb3V0Ym91bmQgdHJhbnNsYXRpb24gd2luZG93cyAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyssIHJlZysrLCBwb3QrKykgeworCQlpZiAocmVnLT5zaXplID09IDApCisJCQlicmVhazsKKworCQlob3NlLT5yZWdpb25zW2ldID0gKnJlZzsKKwkJaG9zZS0+cmVnaW9uX2NvdW50Kys7CisKKwkJcG90LT5wb3RhciA9IHJlZy0+YnVzX3N0YXJ0ID4+IDEyOworCQlwb3QtPnBvYmFyID0gcmVnLT5waHlzX3N0YXJ0ID4+IDEyOworCQlwb3QtPnBvY21yID0gfihyZWctPnNpemUgLSAxKSA+PiAxMjsKKworCQlpZiAocmVnLT5mbGFncyAmIFBDSV9SRUdJT05fSU8pCisJCQlwb3QtPnBvY21yIHw9IFBPQ01SX0lPOworI2lmZGVmIENPTkZJR184M1hYX1BDSV9TVFJFQU1JTkcKKwkJZWxzZSBpZiAocmVnLT5mbGFncyAmIFBDSV9SRUdJT05fUFJFRkVUQ0gpCisJCQlwb3QtPnBvY21yIHw9IFBPQ01SX1NFOworI2VuZGlmCisKKwkJaWYgKGJ1cyA9PSAxKQorCQkJcG90LT5wb2NtciB8PSBQT0NNUl9EU1Q7CisKKwkJcG90LT5wb2NtciB8PSBQT0NNUl9FTjsKKwl9CisKKwkvKiBQb2ludCBpbmJvdW5kIHRyYW5zbGF0aW9uIGF0IFJBTSAqLworCXBjaV9jdHJsLT5waXRhcjEgPSAwOworCXBjaV9jdHJsLT5waWJhcjEgPSAwOworCXBjaV9jdHJsLT5waWViYXIxID0gMDsKKwlwY2lfY3RybC0+cGl3YXIxID0gUElXQVJfRU4gfCBQSVdBUl9QRiB8IFBJV0FSX1JUVF9TTk9PUCB8CisJICAgICAgICAgICAgICAgICAgIFBJV0FSX1dUVF9TTk9PUCB8IChfX2lsb2cyKGdkLT5yYW1fc2l6ZSkgLSAxKTsKKworCWkgPSBob3NlLT5yZWdpb25fY291bnQrKzsKKwlob3NlLT5yZWdpb25zW2ldLmJ1c19zdGFydCA9IDA7CisJaG9zZS0+cmVnaW9uc1tpXS5waHlzX3N0YXJ0ID0gMDsKKwlob3NlLT5yZWdpb25zW2ldLnNpemUgPSBnZC0+cmFtX3NpemU7CisJaG9zZS0+cmVnaW9uc1tpXS5mbGFncyA9IFBDSV9SRUdJT05fTUVNIHwgUENJX1JFR0lPTl9NRU1PUlk7CisKKwlob3NlLT5maXJzdF9idXNubyA9IDA7CisJaG9zZS0+bGFzdF9idXNubyA9IDB4ZmY7CisKKwlwY2lfc2V0dXBfaW5kaXJlY3QoaG9zZSwgQ0ZHX0lNTVIgKyAweDgzMDAgKyBidXMgKiAweDgwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfSU1NUiArIDB4ODMwNCArIGJ1cyAqIDB4ODApOworCisJcGNpX3JlZ2lzdGVyX2hvc2UoaG9zZSk7CisKKwkvKgorCSAqIFdyaXRlIHRvIENvbW1hbmQgcmVnaXN0ZXIKKwkgKi8KKwlyZWcxNiA9IDB4ZmY7CisJZGV2ID0gUENJX0JERihob3NlLT5maXJzdF9idXNubywgMCwgMCk7CisJcGNpX2hvc2VfcmVhZF9jb25maWdfd29yZChob3NlLCBkZXYsIFBDSV9DT01NQU5ELCAmcmVnMTYpOworCXJlZzE2IHw9IFBDSV9DT01NQU5EX1NFUlIgfCBQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlk7CisJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgZGV2LCBQQ0lfQ09NTUFORCwgcmVnMTYpOworCisJLyoKKwkgKiBDbGVhciBub24tcmVzZXJ2ZWQgYml0cyBpbiBzdGF0dXMgcmVnaXN0ZXIuCisJICovCisJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgZGV2LCBQQ0lfU1RBVFVTLCAweGZmZmYpOworCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDB4ODApOworCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgMHgwOCk7CisKKyNpZmRlZiBDT05GSUdfUENJX1NDQU5fU0hPVworCXByaW50ZigiUENJOiAgIEJ1cyBEZXYgVmVuSWQgRGV2SWQgQ2xhc3MgSW50XG4iKTsKKyNlbmRpZgorCS8qCisJICogSG9zZSBzY2FuLgorCSAqLworCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOworfQorCisvKgorICogVGhlIGNhbGxlciBtdXN0IGhhdmUgYWxyZWFkeSBzZXQgT0NDUiwgYW5kIHRoZSBQQ0lfTEFXIEJBUnMKKyAqIG11c3QgaGF2ZSBiZWVuIHNldCB0byBjb3ZlciBhbGwgb2YgdGhlIHJlcXVlc3RlZCByZWdpb25zLgorICoKKyAqIElmIGZld2VyIHRoYW4gdGhyZWUgcmVnaW9ucyBhcmUgcmVxdWVzdGVkLCB0aGVuIHRoZSByZWdpb24KKyAqIGxpc3QgaXMgdGVybWluYXRlZCB3aXRoIGEgcmVnaW9uIG9mIHNpemUgMC4KKyAqLwordm9pZCBtcGM4M3h4X3BjaV9pbml0KGludCBudW1fYnVzZXMsIHN0cnVjdCBwY2lfcmVnaW9uICoqcmVnLCBpbnQgd2FybWJvb3QpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9ICh2b2xhdGlsZSBpbW1hcF90ICopQ0ZHX0lNTVI7CisJaW50IGk7CisKKwlpZiAobnVtX2J1c2VzID4gTUFYX0JVU0VTKSB7CisJCXByaW50ZigiJWQgUENJIGJ1c2VzIHJlcXVzdGVkLCAlZCBzdXBwb3J0ZWRcbiIsCisJCSAgICAgICBudW1fYnVzZXMsIE1BWF9CVVNFUyk7CisKKwkJbnVtX2J1c2VzID0gTUFYX0JVU0VTOworCX0KKworCXBjaV9udW1fYnVzZXMgPSBudW1fYnVzZXM7CisKKwkvKgorCSAqIFJlbGVhc2UgUENJIFJTVCBPdXRwdXQgc2lnbmFsLgorCSAqIFBvd2VyIG9uIHRvIFJTVCBoaWdoIG11c3QgYmUgYXQgbGVhc3QgMTAwIG1zIGFzIHBlciBQQ0kgc3BlYy4KKwkgKiBPbiB3YXJtIGJvb3RzIG9ubHkgMSBtcyBpcyByZXF1aXJlZC4KKwkgKi8KKwl1ZGVsYXkod2FybWJvb3QgPyAxMDAwIDogMTAwMDAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVzZXM7IGkrKykKKwkJaW1tci0+cGNpX2N0cmxbaV0uZ2NyID0gMTsKKworCS8qCisJICogUlNUIGhpZ2ggdG8gZmlyc3QgY29uZmlnIGFjY2VzcyBtdXN0IGJlIGF0IGxlYXN0IDJeMjUgY3ljbGVzCisJICogYXMgcGVyIFBDSSBzcGVjLiAgVGhpcyBjb3VsZCBiZSBjdXQgaW4gaGFsZiBpZiB3ZSBrbm93IHdlJ3JlCisJICogcnVubmluZyBhdCA2Nk1Iei4gIFRoaXMgY291bGQgYmUgaW5zdWZmaWNpZW50bHkgbG9uZyBpZiB3ZSdyZQorCSAqIHJ1bm5pbmcgdGhlIFBDSSBidXMgYXQgc2lnbmlmaWNhbnRseSBsZXNzIHRoYW4gMzNNSHouCisJICovCisJdWRlbGF5KDEwMjAwMDApOworCisJZm9yIChpID0gMDsgaSA8IG51bV9idXNlczsgaSsrKQorCQlwY2lfaW5pdF9idXMoaSwgcmVnW2ldKTsKK30KKworI2lmZGVmIENPTkZJR19PRl9GTEFUX1RSRUUKK3ZvaWQgZnRfcGNpX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCXUzMiAqcDsKKwlpbnQgbGVuOworCisJaWYgKHBjaV9udW1fYnVzZXMgPCAxKQorCQlyZXR1cm47CisKKwlwID0gKHUzMiAqKWZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9wY2lAODUwMC9idXMtcmFuZ2UiLCAmbGVuKTsKKwlpZiAocCkgeworCQlwWzBdID0gcGNpX2hvc2VbMF0uZmlyc3RfYnVzbm87CisJCXBbMV0gPSBwY2lfaG9zZVswXS5sYXN0X2J1c25vOworCX0KKworCWlmIChwY2lfbnVtX2J1c2VzIDwgMikKKwkJcmV0dXJuOworCisJcCA9ICh1MzIgKilmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvcGNpQDg2MDAvYnVzLXJhbmdlIiwgJmxlbik7CisJaWYgKHApIHsKKwkJcFswXSA9IHBjaV9ob3NlWzFdLmZpcnN0X2J1c25vOworCQlwWzFdID0gcGNpX2hvc2VbMV0ubGFzdF9idXNubzsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX09GX0ZMQVRfVFJFRSAqLworCisjZW5kaWYgLyogQ09ORklHXzgzWFhfR0VORVJJQ19QQ0kgKi8KZGlmZiAtLWdpdCBhL2NwdS9tcGM4M3h4L3NwZF9zZHJhbS5jIGIvY3B1L21wYzgzeHgvc3BkX3NkcmFtLmMKaW5kZXggZDliODc1My4uNjQ3ODEzZiAxMDA2NDQKLS0tIGEvY3B1L21wYzgzeHgvc3BkX3NkcmFtLmMKKysrIGIvY3B1L21wYzgzeHgvc3BkX3NkcmFtLmMKQEAgLTU4LDggKzU4LDggQEAKIAlpbnQgY2xrczsKIAogCWRkcl9idXNfY2xrID0gZ2QtPmRkcl9jbGsgPj4gMTsKLQljbGtzID0gcGljb3MgLyAoKDEwMDAwMDAwMDAgLyBkZHJfYnVzX2NsaykgKiAxMDAwKTsKLQlpZiAocGljb3MgJSAoKDEwMDAwMDAwMDAgLyBkZHJfYnVzX2NsaykgKiAxMDAwKSAhPSAwKQorCWNsa3MgPSBwaWNvcyAvICgxMDAwMDAwMDAwIC8gKGRkcl9idXNfY2xrIC8gMTAwMCkpOworCWlmIChwaWNvcyAlICgxMDAwMDAwMDAwIC8gKGRkcl9idXNfY2xrIC8gMTAwMCkpICE9IDApCiAJCWNsa3MrKzsKIAogCXJldHVybiBjbGtzOwpAQCAtNjI0LDcgKzYyNCw3IEBACiAJCQkgfCAoMSA8PCAoMTYgKyAxMCkpICAgICAgICAgICAgIC8qIERRUyBEaWZmZXJlbnRpYWwgZGlzYWJsZSAqLwogCQkJIHwgKGFkZF9sYXQgPDwgKDE2ICsgMykpICAgICAgICAvKiBBZGRpdGl2ZSBMYXRlbmN5IGluIEVNUlMxICovCiAJCQkgfCAobW9kZV9vZHRfZW5hYmxlIDw8IDE2KSAgICAgIC8qIE9EVCBFbmFibGUgaW4gRU1SUzEgKi8KLQkJCSB8ICgodHdyX2NsayA+PiAxKSA8PCA5KSAgICAgICAgLyogV3JpdGUgUmVjb3ZlcnkgQXV0b3ByZSAqLworCQkJIHwgKCh0d3JfY2xrIC0gMSkgPDwgOSkgICAgICAgICAvKiBXcml0ZSBSZWNvdmVyeSBBdXRvcHJlICovCiAJCQkgfCAoY2FzbGF0IDw8IDQpICAgICAgICAgICAgICAgIC8qIGNhc2xhdCAqLwogCQkJIHwgKGJ1cnN0bGVuIDw8IDApICAgICAgICAgICAgICAvKiBCdXJzdCBsZW5ndGggKi8KIAkJCSk7CkBAIC02OTMsMTEgKzY5Myw2IEBACiAKICNpZmRlZiBDRkdfRERSX1NEUkFNX0NMS19DTlRMCS8qIE9wdGlvbmFsIHBsYXRmb3JtIHNwZWNpZmljIHZhbHVlICovCiAJZGRyLT5zZHJhbV9jbGtfY250bCA9IENGR19ERFJfU0RSQU1fQ0xLX0NOVEw7Ci0jZWxzZQotCS8qIFNTX0VOID0gMCwgc291cmNlIHN5bmNocm9ub3VzIGRpc2FibGUKLQkgKiBDTEtfQURKU1QgPSAwLCBNQ0svTUNLIyBpcyBsYXVuY2hlZCBhbGlnbmVkIHdpdGggYWRkci9jbWQKLQkgKi8KLQlkZHItPnNkcmFtX2Nsa19jbnRsID0gMHgwMDAwMDAwMDsKICNlbmRpZgogCWRlYnVnKCJERFI6c2RyYW1fY2xrX2NudGw9MHglMDh4XG4iLCBkZHItPnNkcmFtX2Nsa19jbnRsKTsKIApkaWZmIC0tZ2l0IGEvY3B1L21wYzgzeHgvc3BlZWQuYyBiL2NwdS9tcGM4M3h4L3NwZWVkLmMKaW5kZXggYzc1OTkzMC4uYmYzMDYxNiAxMDA2NDQKLS0tIGEvY3B1L21wYzgzeHgvc3BlZWQuYworKysgYi9jcHUvbXBjODN4eC9zcGVlZC5jCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxtcGM4M3h4Lmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CkBAIC05OSwxMiArMTAwLDE0IEBACiAJdTMyIGxjcnI7CiAKIAl1MzIgY3NiX2NsazsKLSNpZiBkZWZpbmVkKENPTkZJR19NUEM4MzRYKQorI2lmIGRlZmluZWQoQ09ORklHX01QQzgzNFgpIHx8IGRlZmluZWQoQ09ORklHX01QQzgzMVgpCiAJdTMyIHRzZWMxX2NsazsKIAl1MzIgdHNlYzJfY2xrOwotCXUzMiB1c2JtcGhfY2xrOwogCXUzMiB1c2Jkcl9jbGs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVBDODM0WAorCXUzMiB1c2JtcGhfY2xrOworI2VuZGlmCiAJdTMyIGNvcmVfY2xrOwogCXUzMiBpMmMxX2NsazsKICNpZiAhZGVmaW5lZChDT05GSUdfTVBDODMyWCkKQEAgLTE0OCw3ICsxNTEsNyBAQAogCiAJc2NjciA9IGltLT5jbGsuc2NjcjsKIAotI2lmIGRlZmluZWQoQ09ORklHX01QQzgzNFgpCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODM0WCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODMxWCkKIAlzd2l0Y2ggKChzY2NyICYgU0NDUl9UU0VDMUNNKSA+PiBTQ0NSX1RTRUMxQ01fU0hJRlQpIHsKIAljYXNlIDA6CiAJCXRzZWMxX2NsayA9IDA7CkBAIC0xNjcsNiArMTcwLDI2IEBACiAJCXJldHVybiAtNDsKIAl9CiAKKwlzd2l0Y2ggKChzY2NyICYgU0NDUl9VU0JEUkNNKSA+PiBTQ0NSX1VTQkRSQ01fU0hJRlQpIHsKKwljYXNlIDA6CisJCXVzYmRyX2NsayA9IDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdXNiZHJfY2xrID0gY3NiX2NsazsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl1c2Jkcl9jbGsgPSBjc2JfY2xrIC8gMjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl1c2Jkcl9jbGsgPSBjc2JfY2xrIC8gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdW5rb3duIFNDQ1JfVVNCRFJDTSB2YWx1ZSAqLworCQlyZXR1cm4gLTg7CisJfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM4MzRYKQogCXN3aXRjaCAoKHNjY3IgJiBTQ0NSX1RTRUMyQ00pID4+IFNDQ1JfVFNFQzJDTV9TSElGVCkgewogCWNhc2UgMDoKIAkJdHNlYzJfY2xrID0gMDsKQEAgLTIwNSwyNCArMjI4LDYgQEAKIAkJcmV0dXJuIC03OwogCX0KIAotCXN3aXRjaCAoKHNjY3IgJiBTQ0NSX1VTQkRSQ00pID4+IFNDQ1JfVVNCRFJDTV9TSElGVCkgewotCWNhc2UgMDoKLQkJdXNiZHJfY2xrID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQl1c2Jkcl9jbGsgPSBjc2JfY2xrOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXVzYmRyX2NsayA9IGNzYl9jbGsgLyAyOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXVzYmRyX2NsayA9IGNzYl9jbGsgLyAzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiB1bmtvd24gU0NDUl9VU0JEUkNNIHZhbHVlICovCi0JCXJldHVybiAtODsKLQl9Ci0KIAlpZiAodXNibXBoX2NsayAhPSAwICYmIHVzYmRyX2NsayAhPSAwICYmIHVzYm1waF9jbGsgIT0gdXNiZHJfY2xrKSB7CiAJCS8qIGlmIFVTQiBNUEggY2xvY2sgaXMgbm90IGRpc2FibGVkIGFuZAogCQkgKiBVU0IgRFIgY2xvY2sgaXMgbm90IGRpc2FibGVkIHRoZW4KQEAgLTIzMCw4ICsyMzUsMTYgQEAKIAkJICovCiAJCXJldHVybiAtOTsKIAl9CisjZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4MzFYKQorCXRzZWMyX2NsayA9IHRzZWMxX2NsazsKKworCWlmICghKHNjY3IgJiBTQ0NSX1RTRUMxT04pKQorCQl0c2VjMV9jbGsgPSAwOworCWlmICghKHNjY3IgJiBTQ0NSX1RTRUMyT04pKQorCQl0c2VjMl9jbGsgPSAwOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDODM2MCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODMyWCkKKworI2lmICFkZWZpbmVkKENPTkZJR19NUEM4MzRYKQogCWkyYzFfY2xrID0gY3NiX2NsazsKICNlbmRpZgogI2lmICFkZWZpbmVkKENPTkZJR19NUEM4MzJYKQpAQCAtMzE0LDEyICszMjcsMTQgQEAKICNlbmRpZgogCiAJZ2QtPmNzYl9jbGsgPSBjc2JfY2xrOwotI2lmIGRlZmluZWQoQ09ORklHX01QQzgzNFgpCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODM0WCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODMxWCkKIAlnZC0+dHNlYzFfY2xrID0gdHNlYzFfY2xrOwogCWdkLT50c2VjMl9jbGsgPSB0c2VjMl9jbGs7Ci0JZ2QtPnVzYm1waF9jbGsgPSB1c2JtcGhfY2xrOwogCWdkLT51c2Jkcl9jbGsgPSB1c2Jkcl9jbGs7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM4MzRYKQorCWdkLT51c2JtcGhfY2xrID0gdXNibXBoX2NsazsKKyNlbmRpZgogCWdkLT5jb3JlX2NsayA9IGNvcmVfY2xrOwogCWdkLT5pMmMxX2NsayA9IGkyYzFfY2xrOwogI2lmICFkZWZpbmVkKENPTkZJR19NUEM4MzJYKQpAQCAtMzUxLDExICszNjYsMTEgQEAKIAlyZXR1cm4gZ2QtPmNzYl9jbGs7CiB9CiAKLWludCBwcmludF9jbG9ja19jb25mKHZvaWQpCitpbnQgZG9fY2xvY2tzIChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJcHJpbnRmKCJDbG9jayBjb25maWd1cmF0aW9uOlxuIik7Ci0JcHJpbnRmKCIgIENvaGVyZW50IFN5c3RlbSBCdXM6ICU0ZCBNSHpcbiIsIGdkLT5jc2JfY2xrIC8gMTAwMDAwMCk7CiAJcHJpbnRmKCIgIENvcmU6ICAgICAgICAgICAgICAgICU0ZCBNSHpcbiIsIGdkLT5jb3JlX2NsayAvIDEwMDAwMDApOworCXByaW50ZigiICBDb2hlcmVudCBTeXN0ZW0gQnVzOiAlNGQgTUh6XG4iLCBnZC0+Y3NiX2NsayAvIDEwMDAwMDApOwogI2lmIGRlZmluZWQoQ09ORklHX01QQzgzNjApIHx8IGRlZmluZWQoQ09ORklHX01QQzgzMlgpCiAJcHJpbnRmKCIgIFFFOiAgICAgICAgICAgICAgICAgICU0ZCBNSHpcbiIsIGdkLT5xZV9jbGsgLyAxMDAwMDAwKTsKIAlwcmludGYoIiAgQlJHOiAgICAgICAgICAgICAgICAgJTRkIE1IelxuIiwgZ2QtPmJyZ19jbGsgLyAxMDAwMDAwKTsKQEAgLTM3MSwxMSArMzg2LDE4IEBACiAjaWYgIWRlZmluZWQoQ09ORklHX01QQzgzMlgpCiAJcHJpbnRmKCIgIEkyQzI6ICAgICAgICAgICAgICAgICU0ZCBNSHpcbiIsIGdkLT5pMmMyX2NsayAvIDEwMDAwMDApOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDODM0WCkKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM4MzRYKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4MzFYKQogCXByaW50ZigiICBUU0VDMTogICAgICAgICAgICAgICAlNGQgTUh6XG4iLCBnZC0+dHNlYzFfY2xrIC8gMTAwMDAwMCk7CiAJcHJpbnRmKCIgIFRTRUMyOiAgICAgICAgICAgICAgICU0ZCBNSHpcbiIsIGdkLT50c2VjMl9jbGsgLyAxMDAwMDAwKTsKLQlwcmludGYoIiAgVVNCIE1QSDogICAgICAgICAgICAgJTRkIE1IelxuIiwgZ2QtPnVzYm1waF9jbGsgLyAxMDAwMDAwKTsKIAlwcmludGYoIiAgVVNCIERSOiAgICAgICAgICAgICAgJTRkIE1IelxuIiwgZ2QtPnVzYmRyX2NsayAvIDEwMDAwMDApOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODM0WCkKKwlwcmludGYoIiAgVVNCIE1QSDogICAgICAgICAgICAgJTRkIE1IelxuIiwgZ2QtPnVzYm1waF9jbGsgLyAxMDAwMDAwKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQorCitVX0JPT1RfQ01EKGNsb2NrcywgMSwgMCwgZG9fY2xvY2tzLAorCSJjbG9ja3MgIC0gcHJpbnQgY2xvY2sgY29uZmlndXJhdGlvblxuIiwKKwkiICAgIGNsb2Nrc1xuIgorKTsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L2NwdS5jIGIvY3B1L21wYzg1eHgvY3B1LmMKaW5kZXggMDUwN2M0Ny4uNzczNWE1MiAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvY3B1LmMKKysrIGIvY3B1L21wYzg1eHgvY3B1LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiBDb3B5cmlnaHQgMjAwNCwyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIsIDIwMDMgTW90b3JvbGEgSW5jLgogICogWGlhbmdodWEgWGlhbyAoWC5YaWFvQG1vdG9yb2xhLmNvbSkKICAqCkBAIC03MCw2ICs3MCwxNSBAQAogCWNhc2UgU1ZSXzg1NDhfRToKIAkJcHV0cygiODU0OF9FIik7CiAJCWJyZWFrOworCWNhc2UgU1ZSXzg1NDQ6CisJCXB1dHMoIjg1NDQiKTsKKwkJYnJlYWs7CisJY2FzZSBTVlJfODU0NF9FOgorCQlwdXRzKCI4NTQ0X0UiKTsKKwkJYnJlYWs7CisJY2FzZSBTVlJfODU2OF9FOgorCQlwdXRzKCI4NTY4X0UiKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHV0cygiVW5rbm93biIpOwogCQlicmVhazsKQEAgLTExMiw3ICsxMjEsNyBAQAogI2VuZGlmCiAJY2xrZGl2ID0gbGNyciAmIDB4MGY7CiAJaWYgKGNsa2RpdiA9PSAyIHx8IGNsa2RpdiA9PSA0IHx8IGNsa2RpdiA9PSA4KSB7Ci0jaWZkZWYgQ09ORklHX01QQzg1NDgKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM4NTQ4KSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTQ0KQogCQkvKgogCQkgKiBZZXMsIHRoZSBlbnRpcmUgUFEzOCBmYW1pbHkgdXNlIHRoZSBzYW1lCiAJCSAqIGJpdC1yZXByZXNlbnRhdGlvbiBmb3IgdHdpY2UgdGhlIGNsb2NrIGRpdmlkZXIgdmFsdWVzLgpAQCAtMTQwLDE2ICsxNDksMjUgQEAKIAogaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBiZF90ICpiZCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CisJdWludCBwdnI7CisJdWludCB2ZXI7CisJcHZyID0gZ2V0X3B2cigpOworCXZlciA9IFBWUl9WRVIocHZyKTsKKwlpZiAodmVyICYgMSl7CisJLyogZTUwMCB2MiBjb3JlIGhhcyByZXNldCBjb250cm9sIHJlZ2lzdGVyICovCisJCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqIHJzdGNyOworCQlyc3RjciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoQ0ZHX0lNTVIgKyAweEUwMEIwKTsKKwkJKnJzdGNyID0gMHgyOwkJLyogSFJFU0VUX1JFUSAqLworCX1lbHNlewogCS8qCiAJICogSW5pdGlhdGUgaGFyZCByZXNldCBpbiBkZWJ1ZyBjb250cm9sIHJlZ2lzdGVyIERCQ1IwCiAJICogTWFrZSBzdXJlIE1TUltERV0gPSAxCiAJICovCi0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQl2YWwgPSBtZnNwcihEQkNSMCk7Ci0JdmFsIHw9IDB4NzAwMDAwMDA7Ci0JbXRzcHIoREJDUjAsdmFsKTsKLQorCQl1bnNpZ25lZCBsb25nIHZhbDsKKwkJdmFsID0gbWZzcHIoREJDUjApOworCQl2YWwgfD0gMHg3MDAwMDAwMDsKKwkJbXRzcHIoREJDUjAsdmFsKTsKKwl9CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE4Myw5ICsyMDEsOSBAQAogCSAqIENsZWFyIFRTUihXSVMpIGJpdCBieSB3cml0aW5nIDEKIAkgKi8KIAl1bnNpZ25lZCBsb25nIHZhbDsKLQl2YWwgPSBtZnNwcih0c3IpOwotCXZhbCB8PSAweDQwMDAwMDAwOwotCW10c3ByKHRzciwgdmFsKTsKKwl2YWwgPSBtZnNwcihTUFJOX1RTUik7CisJdmFsIHw9IFRTUl9XSVM7CisJbXRzcHIoU1BSTl9UU1IsIHZhbCk7CiB9CiAjZW5kaWYJLyogQ09ORklHX1dBVENIRE9HICovCiAKQEAgLTE5Niw2ICsyMTQsNyBAQAogCiAJZG1hLT5zYXRyMCA9IDB4MDJjNDAwMDA7CiAJZG1hLT5kYXRyMCA9IDB4MDJjNDAwMDA7CisJZG1hLT5zcjAgPSAweGZmZmZmZmY7IC8qIGNsZWFyIGFueSBlcnJvcnMgKi8KIAlhc20oInN5bmM7IGlzeW5jOyBtc3luYyIpOwogCXJldHVybjsKIH0KQEAgLTIxMCw2ICsyMjksMTAgQEAKIAkJc3RhdHVzID0gZG1hLT5zcjA7CiAJfQogCisJLyogY2xlYXIgTVIwW0NTXSBjaGFubmVsIHN0YXJ0IGJpdCAqLworCWRtYS0+bXIwICY9IDB4MDAwMDAwMDE7CisJYXNtKCJzeW5jO2lzeW5jO21zeW5jIik7CisKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJcHJpbnRmICgiRE1BIEVycm9yOiBzdGF0dXMgPSAleFxuIiwgc3RhdHVzKTsKIAl9CkBAIC0yNDUsNiArMjY4LDEwIEBACiAJaWYgKHAgIT0gTlVMTCkKIAkJKnAgPSBjcHVfdG9fYmUzMihjbG9jayk7CiAKKwlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi9xZUBlMDA4MDAwMC8iIE9GX0NQVSAiL2J1cy1mcmVxdWVuY3kiLCAmbGVuKTsKKwlpZiAocCAhPSBOVUxMKQorCQkqcCA9IGNwdV90b19iZTMyKGNsb2NrKTsKKwogCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvc2VyaWFsQDQ1MDAvY2xvY2stZnJlcXVlbmN5IiwgJmxlbik7CiAJaWYgKHAgIT0gTlVMTCkKIAkJKnAgPSBjcHVfdG9fYmUzMihjbG9jayk7CkBAIC0yNTUsMjEgKzI4Miw0MSBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTVBDODVYWF9UU0VDMSkKIAlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI0MDAwL21hYy1hZGRyZXNzIiwgJmxlbik7CisJaWYgKHApCisJCW1lbWNweShwLCBiZC0+YmlfZW5ldGFkZHIsIDYpOworCisJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9ldGhlcm5ldEAyNDAwMC9sb2NhbC1tYWMtYWRkcmVzcyIsICZsZW4pOworCWlmIChwKQogCQltZW1jcHkocCwgYmQtPmJpX2VuZXRhZGRyLCA2KTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfSEFTX0VUSDEpCiAJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9ldGhlcm5ldEAyNTAwMC9tYWMtYWRkcmVzcyIsICZsZW4pOworCWlmIChwKQorCQltZW1jcHkocCwgYmQtPmJpX2VuZXQxYWRkciwgNik7CisKKwlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI1MDAwL2xvY2FsLW1hYy1hZGRyZXNzIiwgJmxlbik7CisJaWYgKHApCiAJCW1lbWNweShwLCBiZC0+YmlfZW5ldDFhZGRyLCA2KTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfSEFTX0VUSDIpCiAJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9ldGhlcm5ldEAyNjAwMC9tYWMtYWRkcmVzcyIsICZsZW4pOworCWlmIChwKQorCQltZW1jcHkocCwgYmQtPmJpX2VuZXQyYWRkciwgNik7CisKKwlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI2MDAwL2xvY2FsLW1hYy1hZGRyZXNzIiwgJmxlbik7CisJaWYgKHApCiAJCW1lbWNweShwLCBiZC0+YmlfZW5ldDJhZGRyLCA2KTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfSEFTX0VUSDMpCiAJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9ldGhlcm5ldEAyNzAwMC9tYWMtYWRkcmVzcyIsICZsZW4pOworCWlmIChwKQorCQltZW1jcHkocCwgYmQtPmJpX2VuZXQzYWRkciwgNik7CisKKwlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI3MDAwL2xvY2FsLW1hYy1hZGRyZXNzIiwgJmxlbik7CisJaWYgKHApCiAJCW1lbWNweShwLCBiZC0+YmlfZW5ldDNhZGRyLCA2KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9jcHUvbXBjODV4eC9jcHVfaW5pdC5jIGIvY3B1L21wYzg1eHgvY3B1X2luaXQuYwppbmRleCA5ZjRkMzZjLi45NTE3MTQ2IDEwMDY0NAotLS0gYS9jcHUvbXBjODV4eC9jcHVfaW5pdC5jCisrKyBiL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMKQEAgLTE0MywxMiArMTQzLDEwIEBACiAJbWVtY3RsLT5icjEgPSBDRkdfQlIxX1BSRUxJTTsKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoQ09ORklHX01QQzg1eHgpCiAjaWYgZGVmaW5lZChDRkdfQlIyX1BSRUxJTSkgJiYgZGVmaW5lZChDRkdfT1IyX1BSRUxJTSkKIAltZW1jdGwtPm9yMiA9IENGR19PUjJfUFJFTElNOwogCW1lbWN0bC0+YnIyID0gQ0ZHX0JSMl9QUkVMSU07CiAjZW5kaWYKLSNlbmRpZgogCiAjaWYgZGVmaW5lZChDRkdfQlIzX1BSRUxJTSkgJiYgZGVmaW5lZChDRkdfT1IzX1BSRUxJTSkKIAltZW1jdGwtPm9yMyA9IENGR19PUjNfUFJFTElNOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvcGNpLmMgYi9jcHUvbXBjODV4eC9wY2kuYwppbmRleCA4NGY4MzlhLi4zYzFhMzIzIDEwMDY0NAotLS0gYS9jcHUvbXBjODV4eC9wY2kuYworKysgYi9jcHUvbXBjODV4eC9wY2kuYwpAQCAtOTAsMTQgKzkwLDE0IEBACiAJcGNpeC0+cG93YmFyMSAgPSAoQ0ZHX1BDSTFfTUVNX1BIWVMgPj4gMTIpICYgMHgwMDBmZmZmZjsKIAlwY2l4LT5wb3diZWFyMSA9IDB4MDAwMDAwMDA7CiAJcGNpeC0+cG93YXIxID0gKFBPV0FSX0VOIHwgUE9XQVJfTUVNX1JFQUQgfAotCQkJUE9XQVJfTUVNX1dSSVRFIHwgUE9XQVJfTUVNXzUxMk0pOworCQkJUE9XQVJfTUVNX1dSSVRFIHwgKF9faWxvZzIoQ0ZHX1BDSTFfTUVNX1NJWkUpIC0gMSkpOwogCiAJcGNpeC0+cG90YXIyICA9IChDRkdfUENJMV9JT19CQVNFID4+IDEyKSAmIDB4MDAwZmZmZmY7CiAJcGNpeC0+cG90ZWFyMiAgPSAweDAwMDAwMDAwOwogCXBjaXgtPnBvd2JhcjIgID0gKENGR19QQ0kxX0lPX1BIWVMgPj4gMTIpICYgMHgwMDBmZmZmZjsKIAlwY2l4LT5wb3diZWFyMiA9IDB4MDAwMDAwMDA7CiAJcGNpeC0+cG93YXIyID0gKFBPV0FSX0VOIHwgUE9XQVJfSU9fUkVBRCB8Ci0JCQlQT1dBUl9JT19XUklURSB8IFBPV0FSX0lPXzFNKTsKKwkJCVBPV0FSX0lPX1dSSVRFIHwgKF9faWxvZzIoQ0ZHX1BDSTFfSU9fU0laRSkgLSAxKSk7CiAKIAlwY2l4LT5waXRhcjEgPSAweDAwMDAwMDAwOwogCXBjaXgtPnBpd2JhcjEgPSAweDAwMDAwMDAwOwpAQCAtMTc1LDE0ICsxNzUsMTQgQEAKIAlwY2l4Mi0+cG93YmFyMSAgPSAoQ0ZHX1BDSTJfTUVNX1BIWVMgPj4gMTIpICYgMHgwMDBmZmZmZjsKIAlwY2l4Mi0+cG93YmVhcjEgPSAweDAwMDAwMDAwOwogCXBjaXgyLT5wb3dhcjEgPSAoUE9XQVJfRU4gfCBQT1dBUl9NRU1fUkVBRCB8Ci0JCQlQT1dBUl9NRU1fV1JJVEUgfCBQT1dBUl9NRU1fNTEyTSk7CisJCQlQT1dBUl9NRU1fV1JJVEUgfCAoX19pbG9nMihDRkdfUENJMl9NRU1fU0laRSkgLSAxKSk7CiAKIAlwY2l4Mi0+cG90YXIyICA9IChDRkdfUENJMl9JT19CQVNFID4+IDEyKSAmIDB4MDAwZmZmZmY7CiAJcGNpeDItPnBvdGVhcjIgID0gMHgwMDAwMDAwMDsKIAlwY2l4Mi0+cG93YmFyMiAgPSAoQ0ZHX1BDSTJfSU9fUEhZUyA+PiAxMikgJiAweDAwMGZmZmZmOwogCXBjaXgyLT5wb3diZWFyMiA9IDB4MDAwMDAwMDA7CiAJcGNpeDItPnBvd2FyMiA9IChQT1dBUl9FTiB8IFBPV0FSX0lPX1JFQUQgfAotCQkJUE9XQVJfSU9fV1JJVEUgfCBQT1dBUl9JT18xTSk7CisJCQlQT1dBUl9JT19XUklURSB8IChfX2lsb2cyKENGR19QQ0kyX0lPX1NJWkUpIC0gMSkpOwogCiAJcGNpeDItPnBpdGFyMSA9IDB4MDAwMDAwMDA7CiAJcGNpeDItPnBpd2JhcjEgPSAweDAwMDAwMDAwOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvc3BkX3NkcmFtLmMgYi9jcHUvbXBjODV4eC9zcGRfc2RyYW0uYwppbmRleCA2ZGE1MzY3Li4zNzc3ZjQ5IDEwMDY0NAotLS0gYS9jcHUvbXBjODV4eC9zcGRfc2RyYW0uYworKysgYi9jcHUvbXBjODV4eC9zcGRfc2RyYW0uYwpAQCAtMjYzLDEzICsyNjMsMTQgQEAKIAl9CiAKIAkvKgotCSAqIEFkanVzdCBERFIgSUkgSU8gdm9sdGFnZSBiaWFzaW5nLiAgSXQganVzdCBtYWtlcyBpdCB3b3JrLgorCSAqIEFkanVzdCBERFIgSUkgSU8gdm9sdGFnZSBiaWFzaW5nLgorCSAqIE9ubHkgODU0OCByZXYgMSBuZWVkcyB0aGUgZml4CiAJICovCi0JaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIyKSB7Ci0JCWd1ci0+ZGRyaW9vdmNyID0gKDAKLQkJCQkgIHwgMHg4MDAwMDAwMAkJLyogRW5hYmxlICovCi0JCQkJICB8IDB4MTAwMDAwMDAJCS8qIFZTRUwgdG8gMS44ViAqLwotCQkJCSAgKTsKKwlpZiAoKFNWUl9WRVIoZ2V0X3N2cigpKSA9PSBTVlJfODU0OF9FKSAmJgorCQkJKFNWUl9NSlJFVihnZXRfc3ZyKCkpID09IDEpICYmCisJCQkoc3BkLm1lbV90eXBlID09IFNQRF9NRU1UWVBFX0REUjIpKSB7CisJCWd1ci0+ZGRyaW9vdmNyID0gKDB4ODAwMDAwMDAJLyogRW5hYmxlICovCisJCQkJICB8IDB4MTAwMDAwMDApOy8qIFZTRUwgdG8gMS44ViAqLwogCX0KIAogCS8qCkBAIC03ODYsMTQgKzc4NywxNyBAQAogCSAqIElzIHRoaXMgYW4gRUNDIEREUiBjaGlwPwogCSAqIEJ1dCBkb24ndCBtZXNzIHdpdGggaXQgaWYgdGhlIEREUiBjb250cm9sbGVyIHdpbGwgaW5pdCBtZW0uCiAJICovCi0jaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQorI2lmZGVmIENPTkZJR19ERFJfRUNDCiAJaWYgKHNwZC5jb25maWcgPT0gMHgwMikgeworI2lmbmRlZiBDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIKIAkJZGRyLT5lcnJfZGlzYWJsZSA9IDB4MDAwMDAwMGQ7CisjZW5kaWYKIAkJZGRyLT5lcnJfc2JlID0gMHgwMGZmMDAwMDsKIAl9CisKIAlkZWJ1ZygiRERSOiBlcnJfZGlzYWJsZSA9IDB4JTA4eFxuIiwgZGRyLT5lcnJfZGlzYWJsZSk7CiAJZGVidWcoIkREUjogZXJyX3NiZSA9IDB4JTA4eFxuIiwgZGRyLT5lcnJfc2JlKTsKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19ERFJfRUNDICovCiAKIAlhc20oInN5bmM7aXN5bmM7bXN5bmMiKTsKIAl1ZGVsYXkoNTAwKTsKQEAgLTk5MSwxNyArOTk1LDI0IEBACiAJCWJyZWFrOwogCWNhc2UgMjU2OgogCWNhc2UgNTEyOgorCQl0bGJfc2l6ZSA9IEJPT0tFX1BBR0VTWl8yNTZNOworCQlicmVhazsKIAljYXNlIDEwMjQ6CiAJY2FzZSAyMDQ4OgotCQl0bGJfc2l6ZSA9IEJPT0tFX1BBR0VTWl8yNTZNOworCQlpZiAoUFZSX1ZFUihnZXRfcHZyKCkpID4gUFZSX1ZFUihQVlJfODV4eCkpCisJCQl0bGJfc2l6ZSA9IEJPT0tFX1BBR0VTWl8xRzsKKwkJZWxzZQorCQkJdGxiX3NpemUgPSBCT09LRV9QQUdFU1pfMjU2TTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHV0cygiRERSOiBvbmx5IDE2TSwzMk0sNjRNLDEyOE0sMjU2TSw1MTJNLDFHIGFuZCAyRyBhcmUgc3VwcG9ydGVkLlxuIik7CiAKIAkJLyoKIAkJICogVGhlIG1lbW9yeSB3YXMgbm90IGFibGUgdG8gYmUgbWFwcGVkLgorCQkgKiBEZWZhdWx0IHRvIGEgc21hbGwgc2l6ZS4KIAkJICovCi0JCXJldHVybiAwOworCQl0bGJfc2l6ZSA9IEJPT0tFX1BBR0VTWl82NE07CisJCW1lbXNpemU9NjQ7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvc3BlZWQuYyBiL2NwdS9tcGM4NXh4L3NwZWVkLmMKaW5kZXggY2E4MWVlNy4uMTIzNTlhMiAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvc3BlZWQuYworKysgYi9jcHUvbXBjODV4eC9zcGVlZC5jCkBAIC0zNyw0OSArMzcsMjEgQEAKIHsKIAl2b2xhdGlsZSBpbW1hcF90ICAgICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gJmltbWFwLT5pbV9ndXI7Ci0JdWludCBwbGF0X3JhdGlvLGU1MDBfcmF0aW87CisJdWludCBwbGF0X3JhdGlvLGU1MDBfcmF0aW8saGFsZl9mcmVxU3lzdGVtQnVzOwogCiAJcGxhdF9yYXRpbyA9IChndXItPnBvcnBsbHNyKSAmIDB4MDAwMDAwM2U7CiAJcGxhdF9yYXRpbyA+Pj0gMTsKLQlzd2l0Y2gocGxhdF9yYXRpbykgewotCWNhc2UgMHgwMjoKLQljYXNlIDB4MDM6Ci0JY2FzZSAweDA0OgotCWNhc2UgMHgwNToKLQljYXNlIDB4MDY6Ci0JY2FzZSAweDA4OgotCWNhc2UgMHgwOToKLQljYXNlIDB4MGE6Ci0JY2FzZSAweDBjOgotCWNhc2UgMHgxMDoKLQkJc3lzSW5mby0+ZnJlcVN5c3RlbUJ1cyA9IHBsYXRfcmF0aW8gKiBDT05GSUdfU1lTX0NMS19GUkVROwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzeXNJbmZvLT5mcmVxU3lzdGVtQnVzID0gMDsKLQkJYnJlYWs7Ci0JfQotCisJc3lzSW5mby0+ZnJlcVN5c3RlbUJ1cyA9IHBsYXRfcmF0aW8gKiBDT05GSUdfU1lTX0NMS19GUkVROwogCWU1MDBfcmF0aW8gPSAoZ3VyLT5wb3JwbGxzcikgJiAweDAwM2YwMDAwOwogCWU1MDBfcmF0aW8gPj49IDE2OwotCXN3aXRjaChlNTAwX3JhdGlvKSB7Ci0JY2FzZSAweDA0OgotCQlzeXNJbmZvLT5mcmVxUHJvY2Vzc29yID0gMipzeXNJbmZvLT5mcmVxU3lzdGVtQnVzOwotCQlicmVhazsKLQljYXNlIDB4MDU6Ci0JCXN5c0luZm8tPmZyZXFQcm9jZXNzb3IgPSA1KnN5c0luZm8tPmZyZXFTeXN0ZW1CdXMvMjsKLQkJYnJlYWs7Ci0JY2FzZSAweDA2OgotCQlzeXNJbmZvLT5mcmVxUHJvY2Vzc29yID0gMypzeXNJbmZvLT5mcmVxU3lzdGVtQnVzOwotCQlicmVhazsKLQljYXNlIDB4MDc6Ci0JCXN5c0luZm8tPmZyZXFQcm9jZXNzb3IgPSA3KnN5c0luZm8tPmZyZXFTeXN0ZW1CdXMvMjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3lzSW5mby0+ZnJlcVByb2Nlc3NvciA9IDA7Ci0JCWJyZWFrOwotCX0KKworCS8qIERpdmlkZSBiZWZvcmUgbXVsdGlwbHkgdG8gYXZvaWQgaW50ZWdlcgorCSAqIG92ZXJmbG93IGZvciBwcm9jZXNzb3Igc3BlZWRzIGFib3ZlIDJHSHogKi8KKwloYWxmX2ZyZXFTeXN0ZW1CdXMgPSBzeXNJbmZvLT5mcmVxU3lzdGVtQnVzLzI7CisJc3lzSW5mby0+ZnJlcVByb2Nlc3NvciA9IGU1MDBfcmF0aW8qaGFsZl9mcmVxU3lzdGVtQnVzOwogfQogCisKIGludCBnZXRfY2xvY2tzICh2b2lkKQogewogCXN5c19pbmZvX3Qgc3lzX2luZm87CmRpZmYgLS1naXQgYS9jcHUvbXBjODV4eC9zdGFydC5TIGIvY3B1L21wYzg1eHgvc3RhcnQuUwppbmRleCBmOTZhNGMzLi4yMGM3ZWJjIDEwMDY0NAotLS0gYS9jcHUvbXBjODV4eC9zdGFydC5TCisrKyBiL2NwdS9tcGM4NXh4L3N0YXJ0LlMKQEAgLTI1MSwxMyArMjUxLDEwIEBACiAJICovCiAJYmwJdGxiMV9lbnRyeQogCW1yCXI1LHIwCi0JbGkJcjEsMHgwMDIwCS8qIG1heCAxNiBUTEIxIHBsdXMgc29tZSBUTEIwIGVudHJpZXMgKi8KLQltdGN0cglyMQogCWx3enUJcjQsMChyNSkJLyogaG93IG1hbnkgVExCMSBlbnRyaWVzIHdlIGFjdHVhbGx5IHVzZSAqLworCW10Y3RyCXI0CiAKLTA6CWNtcHdpCXI0LDAKLQliZXEJMWYKLQlsd3p1CXIwLDQocjUpCiswOglsd3p1CXIwLDQocjUpCiAJbHd6dQlyMSw0KHI1KQogCWx3enUJcjIsNChyNSkKIAlsd3p1CXIzLDQocjUpCkBAIC0yNjksNyArMjY2LDYgQEAKIAltc3luYwogCXRsYndlCiAJaXN5bmMKLQlhZGRpCXI0LHI0LC0xCiAJYmRuegkwYgogCiAxOgpAQCAtMzAxLDIwICsyOTcsMTYgQEAKIAogCWJsCWxhd19lbnRyeQogCW1yCXI2LHIwCi0JbGkJcjEsMHgwMDA3CS8qIDggTEFXcywgYnV0IHJlc2VydmUgb25lIGZvciBib290LW92ZXItcmlvLW9yLXBjaSAqLwotCW10Y3RyCXIxCiAJbHd6dQlyNSwwKHI2KQkvKiBob3cgbWFueSB3aW5kb3dzIHdlIGFjdHVhbGx5IHVzZSAqLworCW10Y3RyCXI1CiAKIAlsaQlyMiwweDBjMjgJLyogdGhlIGZpcnN0IHBhaXIgaXMgcmVzZXJ2ZWQgZm9yIGJvb3Qtb3Zlci1yaW8tb3ItcGNpICovCiAJbGkJcjEsMHgwYzMwCiAKLTA6CWNtcHdpCXI1LDAKLQliZXEJMWYKLQlsd3p1CXI0LDQocjYpCiswOglsd3p1CXI0LDQocjYpCiAJbHd6dQlyMyw0KHI2KQogCXN0d3gJcjQscjcscjIKIAlzdHd4CXIzLHI3LHIxCi0JYWRkaQlyNSxyNSwtMQogCWFkZGkJcjIscjIsMHgwMDIwCiAJYWRkaQlyMSxyMSwweDAwMjAKIAliZG56CTBiCmRpZmYgLS1naXQgYS9jcHUvbXBjODZ4eC9jcHUuYyBiL2NwdS9tcGM4Nnh4L2NwdS5jCmluZGV4IDg0ZjViZWYuLmEzM2FjZmUgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4Nnh4L2NwdS5jCisrKyBiL2NwdS9tcGM4Nnh4L2NwdS5jCkBAIC0yODAsMjIgKzI4MCwzOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTVBDODZYWF9UU0VDMSkKIAlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI0MDAwL21hYy1hZGRyZXNzIiwgJmxlbik7Ci0JbWVtY3B5KHAsIGJkLT5iaV9lbmV0YWRkciwgNik7CisJaWYgKHAgIT0gTlVMTCkKKwkJbWVtY3B5KHAsIGJkLT5iaV9lbmV0YWRkciwgNik7CisJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9ldGhlcm5ldEAyNDAwMC9sb2NhbC1tYWMtYWRkcmVzcyIsICZsZW4pOworCWlmIChwKQorCQltZW1jcHkocCwgYmQtPmJpX2VuZXRhZGRyLCA2KTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTVBDODZYWF9UU0VDMikKIAlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI1MDAwL21hYy1hZGRyZXNzIiwgJmxlbik7Ci0JbWVtY3B5KHAsIGJkLT5iaV9lbmV0MWFkZHIsIDYpOworCWlmIChwICE9IE5VTEwpCisJCW1lbWNweShwLCBiZC0+YmlfZW5ldDFhZGRyLCA2KTsKKwlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI1MDAwL2xvY2FsLW1hYy1hZGRyZXNzIiwgJmxlbik7CisJaWYgKHAgIT0gTlVMTCkKKwkJbWVtY3B5KHAsIGJkLT5iaV9lbmV0MWFkZHIsIDYpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NUEM4NlhYX1RTRUMzKQogCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvZXRoZXJuZXRAMjYwMDAvbWFjLWFkZHJlc3MiLCAmbGVuKTsKLQltZW1jcHkocCwgYmQtPmJpX2VuZXQyYWRkciwgNik7CisJaWYgKHAgIT0gTlVMTCkKKwkJbWVtY3B5KHAsIGJkLT5iaV9lbmV0MmFkZHIsIDYpOworCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvZXRoZXJuZXRAMjYwMDAvbG9jYWwtbWFjLWFkZHJlc3MiLCAmbGVuKTsKKwlpZiAocCAhPSBOVUxMKQorCQltZW1jcHkocCwgYmQtPmJpX2VuZXQyYWRkciwgNik7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01QQzg2WFhfVFNFQzQpCiAJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9ldGhlcm5ldEAyNzAwMC9tYWMtYWRkcmVzcyIsICZsZW4pOwotCW1lbWNweShwLCBiZC0+YmlfZW5ldDNhZGRyLCA2KTsKKwlpZiAocCAhPSBOVUxMKQorCQltZW1jcHkocCwgYmQtPmJpX2VuZXQzYWRkciwgNik7CisJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9ldGhlcm5ldEAyNzAwMC9sb2NhbC1tYWMtYWRkcmVzcyIsICZsZW4pOworCWlmIChwICE9IE5VTEwpCisJCW1lbWNweShwLCBiZC0+YmlfZW5ldDNhZGRyLCA2KTsKICNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9jcHUvbXBjODZ4eC9yZXNldHZlYy5TIGIvY3B1L21wYzg2eHgvcmVzZXR2ZWMuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1NTJmNi4uMDAwMDAwMAotLS0gYS9jcHUvbXBjODZ4eC9yZXNldHZlYy5TCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0JLnNlY3Rpb24gLnJlc2V0dmVjLCJheCIKLQliIF9zdGFydApkaWZmIC0tZ2l0IGEvY3B1L21wYzg2eHgvc3BkX3NkcmFtLmMgYi9jcHUvbXBjODZ4eC9zcGRfc2RyYW0uYwppbmRleCBhYzlmZjgxLi5mMzdhYjQzIDEwMDY0NAotLS0gYS9jcHUvbXBjODZ4eC9zcGRfc2RyYW0uYworKysgYi9jcHUvbXBjODZ4eC9zcGRfc2RyYW0uYwpAQCAtNTEsMjAgKzUxLDMyIEBACiAjZGVmaW5lIENGR19TVVBFUl9CQU5LX0lOVEVSTEVBVklORwkwCiAKIC8qCi0gKiBDb252ZXJ0IHBpY29zZWNvbmRzIGludG8gY2xvY2sgY3ljbGVzIChyb3VuZGluZyB1cCBpZiBuZWVkZWQpLgorICogQ29udmVydCBwaWNvc2Vjb25kcyBpbnRvIERSQU0gY2xvY2sgY3ljbGVzIChyb3VuZGluZyB1cCBpZiBuZWVkZWQpLgogICovCiAKLWludAotcGljb3NfdG9fY2xrKGludCBwaWNvcykKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3BpY29zX3RvX2Nsayh1bnNpZ25lZCBpbnQgcGljb3MpCiB7Ci0JaW50IGNsa3M7CisJLyogdXNlIHVuc2lnbmVkIGxvbmcgbG9uZyB0byBhdm9pZCByb3VuZGluZyBlcnJvcnMgKi8KKwljb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgVUxMXzJlMTIgPSAyMDAwMDAwMDAwMDAwVUxMOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjbGtzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjbGtzX3RlbXA7CiAKLQljbGtzID0gcGljb3MgLyAoMjAwMDAwMDAwMCAvIChnZXRfYnVzX2ZyZXEoMCkgLyAxMDAwKSk7Ci0JaWYgKHBpY29zICUgKDIwMDAwMDAwMDAgLyAoZ2V0X2J1c19mcmVxKDApIC8gMTAwMCkpICE9IDApIHsKKwlpZiAoISBwaWNvcykKKwkgICAgcmV0dXJuIDA7CisKKwljbGtzID0gZ2V0X2J1c19mcmVxKDApICogKHVuc2lnbmVkIGxvbmcgbG9uZykgcGljb3M7CisJY2xrc190ZW1wID0gY2xrczsKKwljbGtzID0gY2xrcyAvIFVMTF8yZTEyOworCWlmIChjbGtzX3RlbXAgJSBVTExfMmUxMikgewogCQljbGtzKys7CiAJfQogCisJaWYgKGNsa3MgPiAweEZGRkZGRkZGVUxMKSB7CisJCWNsa3MgPSAweEZGRkZGRkZGVUxMOworCX0KKwotCXJldHVybiBjbGtzOworCXJldHVybiAodW5zaWduZWQgaW50KSBjbGtzOwogfQogCiAKZGlmZiAtLWdpdCBhL2NwdS9tcGM4Nnh4L3N0YXJ0LlMgYi9jcHUvbXBjODZ4eC9zdGFydC5TCmluZGV4IDc0MDZmZTIuLjY3YzU2ZGIgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4Nnh4L3N0YXJ0LlMKKysrIGIvY3B1L21wYzg2eHgvc3RhcnQuUwpAQCAtMjQxLDI1ICsyNDEsMzkgQEAKIAlibAlzZXR1cF9jY3NyYmFyCiAjZW5kaWYKIAotCS8qIEZpeCBmb3IgU01QIGxpbnV4IC0gQ2hhbmdpbmcgYXJiaXRyYXRpb24gdG8gcm91bmQtcm9iaW4gKi8KLQlsaXMJcjMsIENGR19DQ1NSQkFSQGgKLQlvcmkJcjMsIHIzLCAweDEwMDAKLQl4b3IJcjQsIHI0LCByNAotCWxpCXI0LCAweDEwMDAKLQlzdHcJcjQsIDAocjMpCiAKLQkvKiBzZXR1cCB0aGUgbGF3IGVudHJpZXMgKi8KLQlibAlsYXdfZW50cnkKKwkvKiAtLSBNUEM4NjQxIFJldiAxLjAgTUNNIEVycmF0YSBmaXh1cHMgLS0gKi8KKworCS8qIHNraXAgZml4dXBzIGlmIG5vdCBSZXYgMS4wICovCisJbWZzcHIJcjQsIFNWUgorCXJsd2lubQlyNCxyNCwwLDI0LDMxCisJY21wd2kJcjQsMHgxMAorCWJuZQkxZgorCisJbGlzCXIzLE1DTV9BQkNSQGhhCisJbHd6CXI0LE1DTV9BQkNSQGwocjMpCS8qIEFCQ1IgLT4gcjQgKi8KKworCS8qIHNldCBBQkNSW0FfU1RSTV9DTlRdID0gMCAqLworCXJsd2lubQlyNCxyNCwwLDAsMjkKKworCS8qIHNldCBBQkNSW0FSQl9QT0xJQ1ldIHRvIDB4MSAocm91bmQtcm9iaW4pICovCisJYWRkaQlyMCxyMCwxCisJcmx3aW1pCXI0LHIwLDEyLDE4LDE5CisKKwlzdHcJcjQsTUNNX0FCQ1JAbChyMykJLyogcjQgLT4gQUJDUiAqLwogCXN5bmMKIAotCS8qIERvbid0IHVzZSB0aGlzIGZlYXR1cmUgZHVlIHRvIGJ1ZyBpbiA4NjQxRCBQRDQgKi8KLQkvKiBEaXNhYmxlIEVSRF9ESVMgKi8KLQlsaXMJcjMsIENGR19DQ1NSQkFSQGgKLQlvcmkJcjMsIHIzLCAweDEwMDgKLQlsd3oJcjQsIDAocjMpCisJLyogU2V0IERCQ1JbRVJEX0RJU10gKi8KKwlsaXMJcjMsTUNNX0RCQ1JAaGEKKwlsd3oJcjQsTUNNX0RCQ1JAbChyMykKIAlvcmlzCXI0LCByNCwgMHg0MDAwCi0Jc3R3CXI0LCAwKHIzKQorCXN0dwlyNCxNQ01fREJDUkBsKHIzKQogCXN5bmMKKzE6CisJLyogc2V0dXAgdGhlIGxhdyBlbnRyaWVzICovCisJYmwJbGF3X2VudHJ5CisJc3luYworCiAKICNpZiAoRU1VTEFUT1JfUlVOID09IDEpCiAJLyogT24gdGhlIGVtdWxhdG9yIHdlIHdhbnQgdG8gYWRqdXN0IHRoZXNlIEFTQVAgKi8KZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvNDA1Z3BfcGNpLmMgYi9jcHUvcHBjNHh4LzQwNWdwX3BjaS5jCmluZGV4IDcxMzQzNTUuLjhiZjAzZTEgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvNDA1Z3BfcGNpLmMKKysrIGIvY3B1L3BwYzR4eC80MDVncF9wY2kuYwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2R3b3JkKGhvc2UsIGRldiwgUENJX0NPTU1BTkQsIGNtZHN0YXQpOwogfQogCi0jaWYgIShkZWZpbmVkKENPTkZJR19QSVA0MDUpIHx8IGRlZmluZWQgKENPTkZJR19NSVA0MDUpKSAmJiAhKGRlZmluZWQgKENPTkZJR19TT0xJRENBUkQzKSkKKyNpZiAhKGRlZmluZWQoQ09ORklHX1BJUDQwNSkgfHwgZGVmaW5lZCAoQ09ORklHX01JUDQwNSkpICYmICEoZGVmaW5lZCAoQ09ORklHX1NDMykpCiAKIC8qCiAgKkFzIGlzIHRoZXNlIGZ1bmN0cyBnZXQgY2FsbGVkIG91dCBvZiBmbGFzaCBOb3QgYSBob3JyaWJsZQpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC80NHhfc3BkX2Rkci5jIGIvY3B1L3BwYzR4eC80NHhfc3BkX2Rkci5jCmluZGV4IDEwYjRjMTguLmM1MDBkM2YgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIuYworKysgYi9jcHUvcHBjNHh4LzQ0eF9zcGRfZGRyLmMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIEp1biBHdSwgQXJ0ZXN5biBUZWNobm9sb2d5LCBqdW5nQGFydGVzeW5jcC5jb20KICAqIFN1cHBvcnQgZm9yIEFNQ0MgNDQwIGJhc2VkIG9uIE9wZW5CSU9TIGRyYW1pbml0LmMgZnJvbSBJQk0uCiAgKgotICogKEMpIENvcHlyaWdodCAyMDA1CisgKiAoQykgQ29weXJpZ2h0IDIwMDUtMjAwNwogICogU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC00Miw2ICs0MiwxMSBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCisvKiBkZWZpbmUgREVCVUcgZm9yIGRlYnVnZ2luZyBvdXRwdXQgKG9idmlvdXNseSA7LSkpICovCisjaWYgMAorI2RlZmluZSBERUJVRworI2VuZGlmCisKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8aTJjLmg+CkBAIC0yNDYsMjUgKzI1MSw2IEBACiAjZGVmaW5lIE1ZX1RMQl9XT1JEMl9JX0VOQUJMRQlUTEJfV09SRDJfSV9FTkFCTEUJLyogZGlzYWJsZSBjYWNoaW5nIG9uIFNEUkFNICovCiAjZW5kaWYKIAotY29uc3QgdW5zaWduZWQgbG9uZyB0ZXN0W05VTU1FTVRFU1RTXVtOVU1NRU1XT1JEU10gPSB7Ci0JezB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkZ9LAotCXsweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotCSAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHhBQUFBQUFBQSwgMHhBQUFBQUFBQSwgMHg1NTU1NTU1NSwgMHg1NTU1NTU1NSwgMHhBQUFBQUFBQSwgMHhBQUFBQUFBQSwKLQkgMHg1NTU1NTU1NSwgMHg1NTU1NTU1NX0sCi0JezB4NTU1NTU1NTUsIDB4NTU1NTU1NTUsIDB4QUFBQUFBQUEsIDB4QUFBQUFBQUEsIDB4NTU1NTU1NTUsIDB4NTU1NTU1NTUsCi0JIDB4QUFBQUFBQUEsIDB4QUFBQUFBQUF9LAotCXsweEE1QTVBNUE1LCAweEE1QTVBNUE1LCAweDVBNUE1QTVBLCAweDVBNUE1QTVBLCAweEE1QTVBNUE1LCAweEE1QTVBNUE1LAotCSAweDVBNUE1QTVBLCAweDVBNUE1QTVBfSwKLQl7MHg1QTVBNUE1QSwgMHg1QTVBNUE1QSwgMHhBNUE1QTVBNSwgMHhBNUE1QTVBNSwgMHg1QTVBNUE1QSwgMHg1QTVBNUE1QSwKLQkgMHhBNUE1QTVBNSwgMHhBNUE1QTVBNX0sCi0JezB4QUE1NUFBNTUsIDB4QUE1NUFBNTUsIDB4NTVBQTU1QUEsIDB4NTVBQTU1QUEsIDB4QUE1NUFBNTUsIDB4QUE1NUFBNTUsCi0JIDB4NTVBQTU1QUEsIDB4NTVBQTU1QUF9LAotCXsweDU1QUE1NUFBLCAweDU1QUE1NUFBLCAweEFBNTVBQTU1LCAweEFBNTVBQTU1LCAweDU1QUE1NUFBLCAweDU1QUE1NUFBLAotCSAweEFBNTVBQTU1LCAweEFBNTVBQTU1fQotfTsKLQogLyogYmFua19wYXJtcyBpcyB1c2VkIHRvIHNvcnQgdGhlIGJhbmsgc2l6ZXMgYnkgZGVzY2VuZGluZyBvcmRlciAqLwogc3RydWN0IGJhbmtfcGFyYW0gewogCXVuc2lnbmVkIGxvbmcgY3I7CkBAIC0yNzgsNDYgKzI2NCwzNyBAQAogI2VuZGlmCiB2b2lkIHByb2dyYW1fdGxiKHUzMiBzdGFydCwgdTMyIHNpemUsIHUzMiB0bGJfd29yZDJfaV92YWx1ZSk7CiAKLXVuc2lnbmVkIGNoYXIgc3BkX3JlYWQodWNoYXIgY2hpcCwgdWludCBhZGRyKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNwZF9yZWFkKHVjaGFyIGNoaXAsIHVpbnQgYWRkcik7CitzdGF0aWMgdm9pZCBnZXRfc3BkX2luZm8odW5zaWduZWQgbG9uZyAqZGltbV9wb3B1bGF0ZWQsCisJCQkgdW5zaWduZWQgY2hhciAqaWljMF9kaW1tX2FkZHIsCisJCQkgdW5zaWduZWQgbG9uZyBudW1fZGltbV9iYW5rcyk7CitzdGF0aWMgdm9pZCBjaGVja19tZW1fdHlwZSh1bnNpZ25lZCBsb25nICpkaW1tX3BvcHVsYXRlZCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgKmlpYzBfZGltbV9hZGRyLAorCQkJICAgdW5zaWduZWQgbG9uZyBudW1fZGltbV9iYW5rcyk7CitzdGF0aWMgdm9pZCBjaGVja192b2x0X3R5cGUodW5zaWduZWQgbG9uZyAqZGltbV9wb3B1bGF0ZWQsCisJCQkgICAgdW5zaWduZWQgY2hhciAqaWljMF9kaW1tX2FkZHIsCisJCQkgICAgdW5zaWduZWQgbG9uZyBudW1fZGltbV9iYW5rcyk7CitzdGF0aWMgdm9pZCBwcm9ncmFtX2NmZzAodW5zaWduZWQgbG9uZyAqZGltbV9wb3B1bGF0ZWQsCisJCQkgdW5zaWduZWQgY2hhciAqaWljMF9kaW1tX2FkZHIsCisJCQkgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpOworc3RhdGljIHZvaWQgcHJvZ3JhbV9jZmcxKHVuc2lnbmVkIGxvbmcgKmRpbW1fcG9wdWxhdGVkLAorCQkJIHVuc2lnbmVkIGNoYXIgKmlpYzBfZGltbV9hZGRyLAorCQkJIHVuc2lnbmVkIGxvbmcgbnVtX2RpbW1fYmFua3MpOworc3RhdGljIHZvaWQgcHJvZ3JhbV9ydHIodW5zaWduZWQgbG9uZyAqZGltbV9wb3B1bGF0ZWQsCisJCQl1bnNpZ25lZCBjaGFyICppaWMwX2RpbW1fYWRkciwKKwkJCXVuc2lnbmVkIGxvbmcgbnVtX2RpbW1fYmFua3MpOworc3RhdGljIHZvaWQgcHJvZ3JhbV90cjAodW5zaWduZWQgbG9uZyAqZGltbV9wb3B1bGF0ZWQsCisJCQl1bnNpZ25lZCBjaGFyICppaWMwX2RpbW1fYWRkciwKKwkJCXVuc2lnbmVkIGxvbmcgbnVtX2RpbW1fYmFua3MpOworc3RhdGljIHZvaWQgcHJvZ3JhbV90cjEodm9pZCk7CiAKLXZvaWQgZ2V0X3NwZF9pbmZvKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotCQkgIHVuc2lnbmVkIGxvbmcJIG51bV9kaW1tX2JhbmtzKTsKLQotdm9pZCBjaGVja19tZW1fdHlwZQotKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotIHVuc2lnbmVkIGxvbmcJbnVtX2RpbW1fYmFua3MpOwotCi12b2lkIGNoZWNrX3ZvbHRfdHlwZQotKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotIHVuc2lnbmVkIGxvbmcJbnVtX2RpbW1fYmFua3MpOwotCi12b2lkIHByb2dyYW1fY2ZnMCh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLQkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLQkJICB1bnNpZ25lZCBsb25nCSBudW1fZGltbV9iYW5rcyk7Ci0KLXZvaWQgcHJvZ3JhbV9jZmcxKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotCQkgIHVuc2lnbmVkIGxvbmcJIG51bV9kaW1tX2JhbmtzKTsKLQotdm9pZCBwcm9ncmFtX3J0ciAodW5zaWduZWQgbG9uZyogZGltbV9wb3B1bGF0ZWQsCi0JCSAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0JCSAgdW5zaWduZWQgbG9uZwkgbnVtX2RpbW1fYmFua3MpOwotCi12b2lkIHByb2dyYW1fdHIwICh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLQkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLQkJICB1bnNpZ25lZCBsb25nCSBudW1fZGltbV9iYW5rcyk7Ci0KLXZvaWQgcHJvZ3JhbV90cjEgKHZvaWQpOwotCi12b2lkIHByb2dyYW1fZWNjICh1bnNpZ25lZCBsb25nCSBudW1fYnl0ZXMpOworI2lmZGVmIENPTkZJR19ERFJfRUNDCitzdGF0aWMgdm9pZCBwcm9ncmFtX2VjYyh1bnNpZ25lZCBsb25nIG51bV9ieXRlcyk7CisjZW5kaWYKIAotdW5zaWduZWQKLWxvbmcgIHByb2dyYW1fYnhjcih1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLQkJICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0JCSAgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHByb2dyYW1fYnhjcih1bnNpZ25lZCBsb25nICpkaW1tX3BvcHVsYXRlZCwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKmlpYzBfZGltbV9hZGRyLAorCQkJCSAgdW5zaWduZWQgbG9uZyBudW1fZGltbV9iYW5rcyk7CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWRpbmcgZGF0YSBmcm9tIHRoZSBESU1NIG1vZHVsZSBFRVBST00gb3ZlciB0aGUgU1BEIGJ1cwpAQCAtMzI4LDcgKzMwNSw2IEBACiAgKiBCVUc6IERvbid0IGhhbmRsZSBFQ0MgbWVtb3J5CiAgKiBCVUc6IEEgZmV3IHZhbHVlcyBpbiB0aGUgVFIgcmVnaXN0ZXIgaXMgY3VycmVudGx5IGhhcmRjb2RlZAogICovCi0KIGxvbmcgaW50IHNwZF9zZHJhbSh2b2lkKSB7CiAJdW5zaWduZWQgY2hhciBpaWMwX2RpbW1fYWRkcltdID0gU1BEX0VFUFJPTV9BRERSRVNTOwogCXVuc2lnbmVkIGxvbmcgZGltbV9wb3B1bGF0ZWRbc2l6ZW9mKGlpYzBfZGltbV9hZGRyKV07CkBAIC00MjEsOSArMzk3LDggQEAKIAkgKi8KIAl3aGlsZSAoMSkgewogCQltZnNkcmFtKG1lbV9tY3N0cywgbWNzdHMpOwotCQlpZiAoKG1jc3RzICYgU0RSQU1fTUNTVFNfTVJTQykgIT0gMCkgeworCQlpZiAoKG1jc3RzICYgU0RSQU1fTUNTVFNfTVJTQykgIT0gMCkKIAkJCWJyZWFrOwotCQl9CiAJfQogCiAJLyoKQEAgLTQzMSwxNCArNDA2LDE3IEBACiAJICovCiAJcHJvZ3JhbV90cjEoKTsKIAorI2lmZGVmIENPTkZJR19ERFJfRUNDCiAJLyoKLQkgKiBpZiBFQ0MgaXMgZW5hYmxlZCwgaW5pdGlhbGl6ZSBwYXJpdHkgYml0cworCSAqIElmIGVjYyBpcyBlbmFibGVkLCBpbml0aWFsaXplIHRoZSBwYXJpdHkgYml0cy4KIAkgKi8KKwlwcm9ncmFtX2VjYyh0b3RhbF9zaXplKTsKKyNlbmRpZgogCiAJcmV0dXJuIHRvdGFsX3NpemU7CiB9CiAKLXVuc2lnbmVkIGNoYXIgc3BkX3JlYWQodWNoYXIgY2hpcCwgdWludCBhZGRyKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgc3BkX3JlYWQodWNoYXIgY2hpcCwgdWludCBhZGRyKQogewogCXVuc2lnbmVkIGNoYXIgZGF0YVsyXTsKIApAQCAtNDYwLDkgKzQzOCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgZ2V0X3NwZF9pbmZvKHVuc2lnbmVkIGxvbmcqICAgZGltbV9wb3B1bGF0ZWQsCi0JCSAgdW5zaWduZWQgY2hhciogICBpaWMwX2RpbW1fYWRkciwKLQkJICB1bnNpZ25lZCBsb25nCSAgIG51bV9kaW1tX2JhbmtzKQorc3RhdGljIHZvaWQgZ2V0X3NwZF9pbmZvKHVuc2lnbmVkIGxvbmcgKmRpbW1fcG9wdWxhdGVkLAorCQkJIHVuc2lnbmVkIGNoYXIgKmlpYzBfZGltbV9hZGRyLAorCQkJIHVuc2lnbmVkIGxvbmcgbnVtX2RpbW1fYmFua3MpCiB7CiAJdW5zaWduZWQgbG9uZyBkaW1tX251bTsKIAl1bnNpZ25lZCBsb25nIGRpbW1fZm91bmQ7CkBAIC00ODAsMTQgKzQ1OCwxMCBAQAogCQlpZiAoKG51bV9vZl9ieXRlcyAhPSAwKSAmJiAodG90YWxfc2l6ZSAhPSAwKSkgewogCQkJZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID0gVFJVRTsKIAkJCWRpbW1fZm91bmQgPSBUUlVFOwotI2lmIDAKLQkJCXByaW50ZigiRElNTSBzbG90ICVsdTogcG9wdWxhdGVkXG4iLCBkaW1tX251bSk7Ci0jZW5kaWYKKwkJCWRlYnVnKCJESU1NIHNsb3QgJWx1OiBwb3B1bGF0ZWRcbiIsIGRpbW1fbnVtKTsKIAkJfSBlbHNlIHsKIAkJCWRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9IEZBTFNFOwotI2lmIDAKLQkJCXByaW50ZigiRElNTSBzbG90ICVsdTogTm90IHBvcHVsYXRlZFxuIiwgZGltbV9udW0pOwotI2VuZGlmCisJCQlkZWJ1ZygiRElNTSBzbG90ICVsdTogTm90IHBvcHVsYXRlZFxuIiwgZGltbV9udW0pOwogCQl9CiAJfQogCkBAIC00OTcsOSArNDcxLDkgQEAKIAl9CiB9CiAKLXZvaWQgY2hlY2tfbWVtX3R5cGUodW5zaWduZWQgbG9uZyogICBkaW1tX3BvcHVsYXRlZCwKLQkJICAgIHVuc2lnbmVkIGNoYXIqICAgaWljMF9kaW1tX2FkZHIsCi0JCSAgICB1bnNpZ25lZCBsb25nICAgIG51bV9kaW1tX2JhbmtzKQorc3RhdGljIHZvaWQgY2hlY2tfbWVtX3R5cGUodW5zaWduZWQgbG9uZyAqZGltbV9wb3B1bGF0ZWQsCisJCQkgICB1bnNpZ25lZCBjaGFyICppaWMwX2RpbW1fYWRkciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbnVtX2RpbW1fYmFua3MpCiB7CiAJdW5zaWduZWQgbG9uZyBkaW1tX251bTsKIAl1bnNpZ25lZCBjaGFyIGRpbW1fdHlwZTsKQEAgLTUwOSw5ICs0ODMsNyBAQAogCQkJZGltbV90eXBlID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAyKTsKIAkJCXN3aXRjaCAoZGltbV90eXBlKSB7CiAJCQljYXNlIDc6Ci0jaWYgMAotCQkJCXByaW50ZigiRElNTSBzbG90ICVsdTogRERSIFNEUkFNIGRldGVjdGVkXG4iLCBkaW1tX251bSk7Ci0jZW5kaWYKKwkJCQlkZWJ1ZygiRElNTSBzbG90ICVsdTogRERSIFNEUkFNIGRldGVjdGVkXG4iLCBkaW1tX251bSk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXByaW50ZigiRVJST1I6IFVuc3VwcG9ydGVkIERJTU0gZGV0ZWN0ZWQgaW4gc2xvdCAlbHUuXG4iLApAQCAtNTI1LDEwICs0OTcsOSBAQAogCX0KIH0KIAotCi12b2lkIGNoZWNrX3ZvbHRfdHlwZSh1bnNpZ25lZCBsb25nKiAgIGRpbW1fcG9wdWxhdGVkLAotCQkgICAgIHVuc2lnbmVkIGNoYXIqICAgaWljMF9kaW1tX2FkZHIsCi0JCSAgICAgdW5zaWduZWQgbG9uZyAgICBudW1fZGltbV9iYW5rcykKK3N0YXRpYyB2b2lkIGNoZWNrX3ZvbHRfdHlwZSh1bnNpZ25lZCBsb25nICpkaW1tX3BvcHVsYXRlZCwKKwkJCSAgICB1bnNpZ25lZCBjaGFyICppaWMwX2RpbW1fYWRkciwKKwkJCSAgICB1bnNpZ25lZCBsb25nIG51bV9kaW1tX2JhbmtzKQogewogCXVuc2lnbmVkIGxvbmcgZGltbV9udW07CiAJdW5zaWduZWQgbG9uZyB2b2x0YWdlX3R5cGU7CkBAIC01NDEsMTggKzUxMiwxNiBAQAogCQkJCSAgICAgICBkaW1tX251bSk7CiAJCQkJaGFuZygpOwogCQkJfSBlbHNlIHsKLSNpZiAwCi0JCQkJcHJpbnRmKCJESU1NICVsdSB2b2x0YWdlIGxldmVsIHN1cHBvcnRlZC5cbiIsIGRpbW1fbnVtKTsKLSNlbmRpZgorCQkJCWRlYnVnKCJESU1NICVsdSB2b2x0YWdlIGxldmVsIHN1cHBvcnRlZC5cbiIsIGRpbW1fbnVtKTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CiAJfQogfQogCi12b2lkIHByb2dyYW1fY2ZnMCh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLQkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLQkJICB1bnNpZ25lZCBsb25nCSBudW1fZGltbV9iYW5rcykKK3N0YXRpYyB2b2lkIHByb2dyYW1fY2ZnMCh1bnNpZ25lZCBsb25nICpkaW1tX3BvcHVsYXRlZCwKKwkJCSB1bnNpZ25lZCBjaGFyICppaWMwX2RpbW1fYWRkciwKKwkJCSB1bnNpZ25lZCBsb25nIG51bV9kaW1tX2JhbmtzKQogewogCXVuc2lnbmVkIGxvbmcgZGltbV9udW07CiAJdW5zaWduZWQgbG9uZyBjZmcwOwpAQCAtNjQwLDkgKzYwOSw5IEBACiAJbXRzZHJhbShtZW1fY2ZnMCwgY2ZnMCk7CiB9CiAKLXZvaWQgcHJvZ3JhbV9jZmcxKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotCQkgIHVuc2lnbmVkIGxvbmcJIG51bV9kaW1tX2JhbmtzKQorc3RhdGljIHZvaWQgcHJvZ3JhbV9jZmcxKHVuc2lnbmVkIGxvbmcgKmRpbW1fcG9wdWxhdGVkLAorCQkJIHVuc2lnbmVkIGNoYXIgKmlpYzBfZGltbV9hZGRyLAorCQkJIHVuc2lnbmVkIGxvbmcgbnVtX2RpbW1fYmFua3MpCiB7CiAJdW5zaWduZWQgbG9uZyBjZmcxOwogCW1mc2RyYW0obWVtX2NmZzEsIGNmZzEpOwpAQCAtNjU4LDkgKzYyNyw5IEBACiAJbXRzZHJhbShtZW1fY2ZnMSwgY2ZnMSk7CiB9CiAKLXZvaWQgcHJvZ3JhbV9ydHIgKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotCQkgIHVuc2lnbmVkIGxvbmcJIG51bV9kaW1tX2JhbmtzKQorc3RhdGljIHZvaWQgcHJvZ3JhbV9ydHIodW5zaWduZWQgbG9uZyAqZGltbV9wb3B1bGF0ZWQsCisJCQl1bnNpZ25lZCBjaGFyICppaWMwX2RpbW1fYWRkciwKKwkJCXVuc2lnbmVkIGxvbmcgbnVtX2RpbW1fYmFua3MpCiB7CiAJdW5zaWduZWQgbG9uZyBkaW1tX251bTsKIAl1bnNpZ25lZCBsb25nIGJ1c19wZXJpb2RfeF8xMDsKQEAgLTY3Niw3ICs2NDUsNiBAQAogCWdldF9zeXNfaW5mbygmc3lzX2luZm8pOwogCWJ1c19wZXJpb2RfeF8xMCA9IE9ORV9CSUxMSU9OIC8gKHN5c19pbmZvLmZyZXFQTEIgLyAxMCk7CiAKLQogCWZvciAoZGltbV9udW0gPSAwOyAgZGltbV9udW0gPCBudW1fZGltbV9iYW5rczsgZGltbV9udW0rKykgewogCQlpZiAoZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID09IFRSVUUpIHsKIAkJCXJlZnJlc2hfcmF0ZV90eXBlID0gMHg3RiAmIHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMTIpOwpAQCAtNzE5LDkgKzY4Nyw5IEBACiAJbXRzZHJhbShtZW1fcnRyLCBzZHJhbV9ydHIpOwogfQogCi12b2lkIHByb2dyYW1fdHIwICh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLQkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLQkJICB1bnNpZ25lZCBsb25nCSBudW1fZGltbV9iYW5rcykKK3N0YXRpYyB2b2lkIHByb2dyYW1fdHIwKHVuc2lnbmVkIGxvbmcgKmRpbW1fcG9wdWxhdGVkLAorCQkJIHVuc2lnbmVkIGNoYXIgKmlpYzBfZGltbV9hZGRyLAorCQkJIHVuc2lnbmVkIGxvbmcgbnVtX2RpbW1fYmFua3MpCiB7CiAJdW5zaWduZWQgbG9uZyBkaW1tX251bTsKIAl1bnNpZ25lZCBsb25nIHRyMDsKQEAgLTEwMDEsMTMgKzk2OSw3MyBAQAogCQlicmVhazsKIAl9CiAKLSNpZiAwCi0JcHJpbnRmKCJ0cjA6ICV4XG4iLCB0cjApOwotI2VuZGlmCisJZGVidWcoInRyMDogJXhcbiIsIHRyMCk7CiAJbXRzZHJhbShtZW1fdHIwLCB0cjApOwogfQogCitzdGF0aWMgaW50IHNob3J0X21lbV90ZXN0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBpLCBqOworCXVuc2lnbmVkIGxvbmcgYnhjcl9udW07CisJdW5zaWduZWQgbG9uZyAqbWVtYmFzZTsKKwljb25zdCB1bnNpZ25lZCBsb25nIHRlc3RbTlVNTUVNVEVTVFNdW05VTU1FTVdPUkRTXSA9IHsKKwkJezB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCisJCSAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGfSwKKwkJezB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJCSAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwkJezB4QUFBQUFBQUEsIDB4QUFBQUFBQUEsIDB4NTU1NTU1NTUsIDB4NTU1NTU1NTUsCisJCSAweEFBQUFBQUFBLCAweEFBQUFBQUFBLCAweDU1NTU1NTU1LCAweDU1NTU1NTU1fSwKKwkJezB4NTU1NTU1NTUsIDB4NTU1NTU1NTUsIDB4QUFBQUFBQUEsIDB4QUFBQUFBQUEsCisJCSAweDU1NTU1NTU1LCAweDU1NTU1NTU1LCAweEFBQUFBQUFBLCAweEFBQUFBQUFBfSwKKwkJezB4QTVBNUE1QTUsIDB4QTVBNUE1QTUsIDB4NUE1QTVBNUEsIDB4NUE1QTVBNUEsCisJCSAweEE1QTVBNUE1LCAweEE1QTVBNUE1LCAweDVBNUE1QTVBLCAweDVBNUE1QTVBfSwKKwkJezB4NUE1QTVBNUEsIDB4NUE1QTVBNUEsIDB4QTVBNUE1QTUsIDB4QTVBNUE1QTUsCisJCSAweDVBNUE1QTVBLCAweDVBNUE1QTVBLCAweEE1QTVBNUE1LCAweEE1QTVBNUE1fSwKKwkJezB4QUE1NUFBNTUsIDB4QUE1NUFBNTUsIDB4NTVBQTU1QUEsIDB4NTVBQTU1QUEsCisJCSAweEFBNTVBQTU1LCAweEFBNTVBQTU1LCAweDU1QUE1NUFBLCAweDU1QUE1NUFBfSwKKwkJezB4NTVBQTU1QUEsIDB4NTVBQTU1QUEsIDB4QUE1NUFBNTUsIDB4QUE1NUFBNTUsCisJCSAweDU1QUE1NUFBLCAweDU1QUE1NUFBLCAweEFBNTVBQTU1LCAweEFBNTVBQTU1fX07CisKKwlmb3IgKGJ4Y3JfbnVtID0gMDsgYnhjcl9udW0gPCBNQVhCWENSOyBieGNyX251bSsrKSB7CisJCW10ZGNyKG1lbWNmZ2EsIG1lbV9iMGNyICsgKGJ4Y3JfbnVtIDw8IDIpKTsKKwkJaWYgKChtZmRjcihtZW1jZmdkKSAmIFNEUkFNX0JYQ1JfU0RCRSkgPT0gU0RSQU1fQlhDUl9TREJFKSB7CisJCQkvKiBCYW5rIGlzIGVuYWJsZWQgKi8KKwkJCW1lbWJhc2UgPSAodW5zaWduZWQgbG9uZyopCisJCQkJKG1mZGNyKG1lbWNmZ2QpICYgU0RSQU1fQlhDUl9TREJBX01BU0spOworCisJCQkvKgorCQkJICogUnVuIHRoZSBzaG9ydCBtZW1vcnkgdGVzdAorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgTlVNTUVNVEVTVFM7IGkrKykgeworCQkJCWZvciAoaiA9IDA7IGogPCBOVU1NRU1XT1JEUzsgaisrKSB7CisJCQkJCW1lbWJhc2Vbal0gPSB0ZXN0W2ldW2pdOworCQkJCQlwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSYobWVtYmFzZVtqXSkpOworCQkJCX0KKworCQkJCWZvciAoaiA9IDA7IGogPCBOVU1NRU1XT1JEUzsgaisrKSB7CisJCQkJCWlmIChtZW1iYXNlW2pdICE9IHRlc3RbaV1bal0pIHsKKwkJCQkJCXBwY0RjYmYoKHVuc2lnbmVkIGxvbmcpJihtZW1iYXNlW2pdKSk7CisJCQkJCQlyZXR1cm4gMDsKKwkJCQkJfQorCQkJCQlwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSYobWVtYmFzZVtqXSkpOworCQkJCX0KKworCQkJCWlmIChqIDwgTlVNTUVNV09SRFMpCisJCQkJCXJldHVybiAwOworCQkJfQorCisJCQkvKgorCQkJICogc2VlIGlmIHRoZSByZGNsdCB2YWx1ZSBwYXNzZWQKKwkJCSAqLworCQkJaWYgKGkgPCBOVU1NRU1URVNUUykKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCi12b2lkIHByb2dyYW1fdHIxICh2b2lkKQorc3RhdGljIHZvaWQgcHJvZ3JhbV90cjEodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHRyMDsKIAl1bnNpZ25lZCBsb25nIHRyMTsKQEAgLTEwMTUsOCArMTA0Myw3IEBACiAJdW5zaWduZWQgbG9uZyBlY2NfdGVtcDsKIAl1bnNpZ25lZCBsb25nIGRseWNhbDsKIAl1bnNpZ25lZCBsb25nIGRseV92YWw7Ci0JdW5zaWduZWQgbG9uZyBpLCBqLCBrOwotCXVuc2lnbmVkIGxvbmcgYnhjcl9udW07CisJdW5zaWduZWQgbG9uZyBrOwogCXVuc2lnbmVkIGxvbmcgbWF4X3Bhc3NfbGVuZ3RoOwogCXVuc2lnbmVkIGxvbmcgY3VycmVudF9wYXNzX2xlbmd0aDsKIAl1bnNpZ25lZCBsb25nIGN1cnJlbnRfZmFpbF9sZW5ndGg7CkBAIC0xMDI5LDcgKzEwNTYsNiBAQAogCXVuc2lnbmVkIGNoYXIgd2luZG93X2ZvdW5kOwogCXVuc2lnbmVkIGNoYXIgZmFpbF9mb3VuZDsKIAl1bnNpZ25lZCBjaGFyIHBhc3NfZm91bmQ7Ci0JdW5zaWduZWQgbG9uZyAqIG1lbWJhc2U7CiAJUFBDNDQwX1NZU19JTkZPIHN5c19pbmZvOwogCiAJLyoKQEAgLTEwNzksNTUgKzExMDUsMTYgQEAKIAl3aW5kb3dfZm91bmQgPSBGQUxTRTsKIAlmYWlsX2ZvdW5kID0gRkFMU0U7CiAJcGFzc19mb3VuZCA9IEZBTFNFOwotI2lmZGVmIERFQlVHCi0JcHJpbnRmKCJTdGFydGluZyBtZW1vcnkgdGVzdCAiKTsKLSNlbmRpZgorCWRlYnVnKCJTdGFydGluZyBtZW1vcnkgdGVzdCAiKTsKKwogCWZvciAoayA9IDA7IGsgPCBOVU1IQUxGQ1lDTEVTOyBrKyspIHsKLQkJZm9yIChyZGNsdCA9IDA7IHJkY2x0IDwgZGx5X3ZhbDsgcmRjbHQrKykgIHsKKwkJZm9yIChyZGNsdCA9IDA7IHJkY2x0IDwgZGx5X3ZhbDsgcmRjbHQrKykgewogCQkJLyoKIAkJCSAqIFNldCB0aGUgdGltaW5nIHJlZyBmb3IgdGhlIHRlc3QuCiAJCQkgKi8KIAkJCW10c2RyYW0obWVtX3RyMSwgKHRyMSB8IFNEUkFNX1RSMV9SRENUX0VOQ09ERShyZGNsdCkpKTsKIAotCQkJZm9yIChieGNyX251bSA9IDA7IGJ4Y3JfbnVtIDwgTUFYQlhDUjsgYnhjcl9udW0rKykgewotCQkJCW10ZGNyKG1lbWNmZ2EsIG1lbV9iMGNyICsgKGJ4Y3JfbnVtPDwyKSk7Ci0JCQkJaWYgKChtZmRjcihtZW1jZmdkKSAmIFNEUkFNX0JYQ1JfU0RCRSkgPT0gU0RSQU1fQlhDUl9TREJFKSB7Ci0JCQkJCS8qIEJhbmsgaXMgZW5hYmxlZCAqLwotCQkJCQltZW1iYXNlID0gKHVuc2lnbmVkIGxvbmcqKQotCQkJCQkJKG1mZGNyKG1lbWNmZ2QpICYgU0RSQU1fQlhDUl9TREJBX01BU0spOwotCi0JCQkJCS8qCi0JCQkJCSAqIFJ1biB0aGUgc2hvcnQgbWVtb3J5IHRlc3QKLQkJCQkJICovCi0JCQkJCWZvciAoaSA9IDA7IGkgPCBOVU1NRU1URVNUUzsgaSsrKSB7Ci0JCQkJCQlmb3IgKGogPSAwOyBqIDwgTlVNTUVNV09SRFM7IGorKykgewotCQkJCQkJCW1lbWJhc2Vbal0gPSB0ZXN0W2ldW2pdOwotCQkJCQkJCXBwY0RjYmYoKHVuc2lnbmVkIGxvbmcpJihtZW1iYXNlW2pdKSk7Ci0JCQkJCQl9Ci0KLQkJCQkJCWZvciAoaiA9IDA7IGogPCBOVU1NRU1XT1JEUzsgaisrKSB7Ci0JCQkJCQkJaWYgKG1lbWJhc2Vbal0gIT0gdGVzdFtpXVtqXSkgewotCQkJCQkJCQlwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSYobWVtYmFzZVtqXSkpOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCQl9Ci0JCQkJCQkJcHBjRGNiZigodW5zaWduZWQgbG9uZykmKG1lbWJhc2Vbal0pKTsKLQkJCQkJCX0KLQotCQkJCQkJaWYgKGogPCBOVU1NRU1XT1JEUykgewotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJLyoKLQkJCQkJICogc2VlIGlmIHRoZSByZGNsdCB2YWx1ZSBwYXNzZWQKLQkJCQkJICovCi0JCQkJCWlmIChpIDwgTlVNTUVNVEVTVFMpIHsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoYnhjcl9udW0gPT0gTUFYQlhDUikgeworCQkJaWYgKHNob3J0X21lbV90ZXN0KCkpIHsKIAkJCQlpZiAoZmFpbF9mb3VuZCA9PSBUUlVFKSB7CiAJCQkJCXBhc3NfZm91bmQgPSBUUlVFOwogCQkJCQlpZiAoY3VycmVudF9wYXNzX2xlbmd0aCA9PSAwKSB7CkBAIC0xMTU3LDkgKzExNDQsOCBAQAogCQkJCX0KIAkJCX0KIAkJfQotI2lmZGVmIERFQlVHCi0JCXByaW50ZigiLiIpOwotI2VuZGlmCisJCWRlYnVnKCIuIik7CisKIAkJaWYgKHdpbmRvd19mb3VuZCA9PSBUUlVFKSB7CiAJCQlicmVhazsKIAkJfQpAQCAtMTE2Nyw5ICsxMTUzLDcgQEAKIAkJdHIxID0gdHIxIF4gU0RSQU1fVFIxX1JEQ0RfTUFTSzsKIAkJcmRjbHRfb2Zmc2V0ICs9IGRseV92YWw7CiAJfQotI2lmZGVmIERFQlVHCi0JcHJpbnRmKCJcbiIpOwotI2VuZGlmCisJZGVidWcoIlxuIik7CiAKIAkvKgogCSAqIG1ha2Ugc3VyZSB3ZSBmaW5kIHRoZSB3aW5kb3cKQEAgLTEyMTgsMTggKzEyMDIsMTcgQEAKIAl9CiAJdHIxIHw9IFNEUkFNX1RSMV9SRENUX0VOQ09ERShyZGNsdF9hdmVyYWdlKTsKIAotI2lmIDAKLQlwcmludGYoInRyMTogJXhcbiIsIHRyMSk7Ci0jZW5kaWYKKwlkZWJ1ZygidHIxOiAleFxuIiwgdHIxKTsKKwogCS8qCiAJICogcHJvZ3JhbSBTRFJBTSBUaW1pbmcgUmVnaXN0ZXIgMSBUUjEKIAkgKi8KIAltdHNkcmFtKG1lbV90cjEsIHRyMSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgcHJvZ3JhbV9ieGNyKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotCQkJICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0JCQkgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHByb2dyYW1fYnhjcih1bnNpZ25lZCBsb25nICpkaW1tX3BvcHVsYXRlZCwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKmlpYzBfZGltbV9hZGRyLAorCQkJCSAgdW5zaWduZWQgbG9uZyBudW1fZGltbV9iYW5rcykKIHsKIAl1bnNpZ25lZCBsb25nIGRpbW1fbnVtOwogCXVuc2lnbmVkIGxvbmcgYmFua19iYXNlX2FkZHI7CkBAIC0xMjYyLDggKzEyNDUsOCBAQAogI2lmZGVmIENPTkZJR19CQU1CT08KIAkvKgogCSAqIFRoaXMgbmV4dCBzZWN0aW9uIGlzIGhhcmR3YXJlIGRlcGVuZGVudCBhbmQgbXVzdCBiZSBwcm9ncmFtbWVkCi0JICogdG8gbWF0Y2ggdGhlIGhhcmR3YXJlLiAgRm9yIGJhbW1ib28sIHRoZSBmb2xsb3dpbmcgaG9sZHMuLi4KLQkgKiAxLiBTRFJBTTBfQjBDUjogQmFuayAwIG9mIGRpbW0gMCBjdHJsX2JhbmtfbnVtIDogMAorCSAqIHRvIG1hdGNoIHRoZSBoYXJkd2FyZS4gIEZvciBiYW1ib28sIHRoZSBmb2xsb3dpbmcgaG9sZHMuLi4KKwkgKiAxLiBTRFJBTTBfQjBDUjogQmFuayAwIG9mIGRpbW0gMCBjdHJsX2JhbmtfbnVtIDogMCAoc29sZGVyZWQgb25ib2FyZCkKIAkgKiAyLiBTRFJBTTBfQjFDUjogQmFuayAwIG9mIGRpbW0gMSBjdHJsX2JhbmtfbnVtIDogMQogCSAqIDMuIFNEUkFNMF9CMkNSOiBCYW5rIDEgb2YgZGltbSAxIGN0cmxfYmFua19udW0gOiAxCiAJICogNC4gU0RSQU0wX0IzQ1I6IEJhbmsgMCBvZiBkaW1tIDIgY3RybF9iYW5rX251bSA6IDMKQEAgLTEyNzMsMTAgKzEyNTYsMTIgQEAKIAljdHJsX2JhbmtfbnVtWzFdID0gMTsKIAljdHJsX2JhbmtfbnVtWzJdID0gMzsKICNlbHNlCisJLyoKKwkgKiBPY290ZWEsIEVib255IGFuZCB0aGUgb3RoZXIgSUJNL0FNQ0MgZXZhbCBib2FyZHMgaGF2ZQorCSAqIDIgRElNTSBzbG90cyB3aXRoIGVhY2ggbWF4IDIgYmFua3MKKwkgKi8KIAljdHJsX2JhbmtfbnVtWzBdID0gMDsKLQljdHJsX2JhbmtfbnVtWzFdID0gMTsKLQljdHJsX2JhbmtfbnVtWzJdID0gMjsKLQljdHJsX2JhbmtfbnVtWzNdID0gMzsKKwljdHJsX2JhbmtfbnVtWzFdID0gMjsKICNlbmRpZgogCiAJLyoKQEAgLTEyOTAsNiArMTI3NSw4IEBACiAJCQludW1fY29sX2FkZHIgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDQpOwogCQkJbnVtX2JhbmtzICAgID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCA1KTsKIAkJCWJhbmtfc2l6ZV9pZCA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMzEpOworCQkJZGVidWcoIkRJTU0lZDogcm93PSVkIGNvbD0lZCBiYW5rcz0lZFxuIiwgZGltbV9udW0sCisJCQkgICAgICBudW1fcm93X2FkZHIsIG51bV9jb2xfYWRkciwgbnVtX2JhbmtzKTsKIAogCQkJLyoKIAkJCSAqIFNldCB0aGUgU0RSQU0wX0J4Q1IgcmVncwpAQCAtMTM1NCw5ICsxMzQxLDEyIEBACiAJCQljciB8PSBTRFJBTV9CWENSX1NEQkU7CiAKICAJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2JhbmtzOyBpKyspIHsKLQkJCQliYW5rX3Bhcm1zW2N0cmxfYmFua19udW1bZGltbV9udW1dK2krZGltbV9udW1dLmJhbmtfc2l6ZV9ieXRlcyA9Ci0JCQkJCSg0ICogMTAyNCAqIDEwMjQpICogYmFua19zaXplX2lkOwotCQkJCWJhbmtfcGFybXNbY3RybF9iYW5rX251bVtkaW1tX251bV0raStkaW1tX251bV0uY3IgPSBjcjsKKwkJCQliYW5rX3Bhcm1zW2N0cmxfYmFua19udW1bZGltbV9udW1dK2ldLmJhbmtfc2l6ZV9ieXRlcyA9CisJCQkJCSg0IDw8IDIwKSAqIGJhbmtfc2l6ZV9pZDsKKwkJCQliYW5rX3Bhcm1zW2N0cmxfYmFua19udW1bZGltbV9udW1dK2ldLmNyID0gY3I7CisJCQkJZGVidWcoIkRJTU0lZC1iYW5rICVkIChTRFJBTTBfQiVkQ1IpOiBiYW5rX3NpemVfYnl0ZXM9JWRcbiIsCisJCQkJICAgICAgZGltbV9udW0sIGksIGN0cmxfYmFua19udW1bZGltbV9udW1dK2ksCisJCQkJICAgICAgYmFua19wYXJtc1tjdHJsX2JhbmtfbnVtW2RpbW1fbnVtXStpXS5iYW5rX3NpemVfYnl0ZXMpOwogIAkJCX0KIAkJfQogCX0KQEAgLTE0MDAsMTMgKzEzOTAsMTUgQEAKIAkJCQliYW5rX3Bhcm1zW3NvcnRlZF9iYW5rX251bVtieF9jcl9udW1dXS5jcjsKIAkJCW10ZGNyKG1lbWNmZ2QsIHRlbXApOwogCQkJYmFua19iYXNlX2FkZHIgKz0gYmFua19wYXJtc1tzb3J0ZWRfYmFua19udW1bYnhfY3JfbnVtXV0uYmFua19zaXplX2J5dGVzOworCQkJZGVidWcoIlNEUkFNMF9CJWRDUj0weCUwOGx4XG4iLCBzb3J0ZWRfYmFua19udW1bYnhfY3JfbnVtXSwgdGVtcCk7CiAJCX0KIAl9CiAKIAlyZXR1cm4oYmFua19iYXNlX2FkZHIpOwogfQogCi12b2lkIHByb2dyYW1fZWNjICh1bnNpZ25lZCBsb25nCSBudW1fYnl0ZXMpCisjaWZkZWYgQ09ORklHX0REUl9FQ0MKK3N0YXRpYyB2b2lkIHByb2dyYW1fZWNjKHVuc2lnbmVkIGxvbmcgbnVtX2J5dGVzKQogewogCXVuc2lnbmVkIGxvbmcgYmFua19iYXNlX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBjdXJyZW50X2FkZHJlc3M7CkBAIC0xNDI1LDE0ICsxNDE3LDEyIEBACiAJYmFua19iYXNlX2FkZHIgPSBDRkdfU0RSQU1fQkFTRTsKIAogCWlmICgoY2ZnMCAmIFNEUkFNX0NGRzBfTUNIS19NQVNLKSAhPSBTRFJBTV9DRkcwX01DSEtfTk9OKSB7Ci0JCW10c2RyYW0obWVtX2NmZzAsIChjZmcwICYgflNEUkFNX0NGRzBfTUNIS19NQVNLKSB8Ci0JCQlTRFJBTV9DRkcwX01DSEtfR0VOKTsKKwkJbXRzZHJhbShtZW1fY2ZnMCwgKGNmZzAgJiB+U0RSQU1fQ0ZHMF9NQ0hLX01BU0spIHwgU0RSQU1fQ0ZHMF9NQ0hLX0dFTik7CiAKLQkJaWYgKChjZmcwICYgU0RSQU1fQ0ZHMF9ETVdEX01BU0spID09IFNEUkFNX0NGRzBfRE1XRF8zMikgeworCQlpZiAoKGNmZzAgJiBTRFJBTV9DRkcwX0RNV0RfTUFTSykgPT0gU0RSQU1fQ0ZHMF9ETVdEXzMyKQogCQkJYWRkcmVzc19pbmNyZW1lbnQgPSA0OwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlhZGRyZXNzX2luY3JlbWVudCA9IDg7Ci0JCX0KIAogCQljdXJyZW50X2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykoYmFua19iYXNlX2FkZHIpOwogCQllbmRfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKShiYW5rX2Jhc2VfYWRkcikgKyBudW1fYnl0ZXM7CkBAIC0xNDQ2LDQgKzE0MzYsNSBAQAogCQkJU0RSQU1fQ0ZHMF9NQ0hLX0NISyk7CiAJfQogfQorI2VuZGlmIC8qIENPTkZJR19ERFJfRUNDICovCiAjZW5kaWYgLyogQ09ORklHX1NQRF9FRVBST00gKi8KZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMgYi9jcHUvcHBjNHh4LzQ0eF9zcGRfZGRyMi5jCmluZGV4IDJlY2QzZTQuLjQ4YjllZTIgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvNDR4X3NwZF9kZHIyLmMKKysrIGIvY3B1L3BwYzR4eC80NHhfc3BkX2RkcjIuYwpAQCAtNDY1LDcgKzQ2NSwxMSBAQAogCSAqIFNldCB0aGUgU0RSQU0gQ2xvY2sgVGltaW5nIFJlZ2lzdGVyCiAJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAJbWZzZHJhbShTRFJBTV9DTEtUUiwgdmFsKTsKKyNpZmRlZiBDRkdfNDR4X0REUjJfQ0tUUl8xODAKKwltdHNkcmFtKFNEUkFNX0NMS1RSLCAodmFsICYgflNEUkFNX0NMS1RSX0NMS1BfTUFTSykgfCBTRFJBTV9DTEtUUl9DTEtQXzE4MF9ERUdfQURWKTsKKyNlbHNlCiAJbXRzZHJhbShTRFJBTV9DTEtUUiwgKHZhbCAmIH5TRFJBTV9DTEtUUl9DTEtQX01BU0spIHwgU0RSQU1fQ0xLVFJfQ0xLUF8wX0RFRyk7CisjZW5kaWYKIAogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogUHJvZ3JhbSB0aGUgQnhDRiByZWdpc3RlcnMuCkBAIC0xMTE3LDcgKzExMjEsOCBAQAogCQkJCW1vZHQzID0gMHgwMDAwMDAwMDsKIAkJCX0KIAkJCWlmICh0b3RhbF9yYW5rID09IDQpIHsKLQkJCQljb2R0IHw9IENBTENfT0RUX1IoMCkgfCBDQUxDX09EVF9SKDEpIHwgQ0FMQ19PRFRfUigyKSB8IENBTENfT0RUX1IoMyk7CisJCQkJY29kdCB8PSBDQUxDX09EVF9SKDApIHwgQ0FMQ19PRFRfUigxKSB8CisJCQkJCUNBTENfT0RUX1IoMikgfCBDQUxDX09EVF9SKDMpOwogCQkJCW1vZHQwID0gQ0FMQ19PRFRfUlcoMik7CiAJCQkJbW9kdDEgPSAweDAwMDAwMDAwOwogCQkJCW1vZHQyID0gQ0FMQ19PRFRfUlcoMCk7CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4LzR4eF9lbmV0LmMgYi9jcHUvcHBjNHh4LzR4eF9lbmV0LmMKaW5kZXggY2Y1NjU4MS4uMTIwMGQwMiAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC80eHhfZW5ldC5jCisrKyBiL2NwdS9wcGM0eHgvNHh4X2VuZXQuYwpAQCAtMzM5LDI5ICszMzksNDEgQEAKIGludCBwcGNfNHh4X2V0aF9zZXR1cF9icmlkZ2UoaW50IGRldm51bSwgYmRfdCAqIGJpcykKIHsKIAl1bnNpZ25lZCBsb25nIHptaWlmZXI9MHgwOworCXVuc2lnbmVkIGxvbmcgcGZjMTsKIAotCS8qCi0JICogUmlnaHQgbm93IG9ubHkgMipSR01JSSBpcyBzdXBwb3J0ZWQuIFBsZWFzZSBleHRlbmQgd2hlbiBuZWVkZWQuCi0JICogc3IgLSAyMDA2LTA4LTI5Ci0JICovCi0Jc3dpdGNoICgxKSB7Ci0JY2FzZSAwOgorCW1mc2RyKHNkcl9wZmMxLCBwZmMxKTsKKwlwZmMxICY9IFNEUjBfUEZDMV9TRUxFQ1RfTUFTSzsKKworCXN3aXRjaCAocGZjMSkgeworCWNhc2UgU0RSMF9QRkMxX1NFTEVDVF9DT05GSUdfMjoKIAkJLyogMSB4IEdNSUkgcG9ydCAqLwogCQlvdXQzMiAoWk1JSV9GRVIsIDB4MDApOwogCQlvdXQzMiAoUkdNSUlfRkVSLCAweDAwMDAwMDM3KTsKIAkJYmlzLT5iaV9waHltb2RlWzBdID0gQklfUEhZTU9ERV9HTUlJOwogCQliaXMtPmJpX3BoeW1vZGVbMV0gPSBCSV9QSFlNT0RFX05PTkU7CiAJCWJyZWFrOwotCWNhc2UgMToKKwljYXNlIFNEUjBfUEZDMV9TRUxFQ1RfQ09ORklHXzQ6CiAJCS8qIDIgeCBSR01JSSBwb3J0cyAqLwogCQlvdXQzMiAoWk1JSV9GRVIsIDB4MDApOwogCQlvdXQzMiAoUkdNSUlfRkVSLCAweDAwMDAwMDU1KTsKIAkJYmlzLT5iaV9waHltb2RlWzBdID0gQklfUEhZTU9ERV9SR01JSTsKIAkJYmlzLT5iaV9waHltb2RlWzFdID0gQklfUEhZTU9ERV9SR01JSTsKIAkJYnJlYWs7Ci0JY2FzZSAyOgorCWNhc2UgU0RSMF9QRkMxX1NFTEVDVF9DT05GSUdfNjoKIAkJLyogMiB4IFNNSUkgcG9ydHMgKi8KLQorCQlvdXQzMiAoWk1JSV9GRVIsCisJCSAgICAgICAoKFpNSUlfRkVSX1NNSUkpIDw8IFpNSUlfRkVSX1YoMCkpIHwKKwkJICAgICAgICgoWk1JSV9GRVJfU01JSSkgPDwgWk1JSV9GRVJfVigxKSkpOworCQlvdXQzMiAoUkdNSUlfRkVSLCAweDAwMDAwMDAwKTsKKwkJYmlzLT5iaV9waHltb2RlWzBdID0gQklfUEhZTU9ERV9TTUlJOworCQliaXMtPmJpX3BoeW1vZGVbMV0gPSBCSV9QSFlNT0RFX1NNSUk7CisJCWJyZWFrOworCWNhc2UgU0RSMF9QRkMxX1NFTEVDVF9DT05GSUdfMV8yOgorCQkvKiBvbmx5IDEgeCBNSUkgc3VwcG9ydGVkICovCisJCW91dDMyIChaTUlJX0ZFUiwgKFpNSUlfRkVSX01JSSkgPDwgWk1JSV9GRVJfVigwKSk7CisJCW91dDMyIChSR01JSV9GRVIsIDB4MDAwMDAwMDApOworCQliaXMtPmJpX3BoeW1vZGVbMF0gPSBCSV9QSFlNT0RFX01JSTsKKwkJYmlzLT5iaV9waHltb2RlWzFdID0gQklfUEhZTU9ERV9OT05FOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvY3B1LmMgYi9jcHUvcHBjNHh4L2NwdS5jCmluZGV4IDhlNmJjODQuLmMwN2JjMGMgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvY3B1LmMKKysrIGIvY3B1L3BwYzR4eC9jcHUuYwpAQCAtMTM5LDYgKzEzOSw3IEBACiAJIlJlc2VydmVkIiwKIAkiSTJDIChBZGRyIDB4NTApIiwKIH07CitzdGF0aWMgY2hhciBib290c3RyYXBfY2hhcltdID0geyAnQScsICdCJywgJ0MnLCAnQicsICdEJywgJ0UnLCAneCcsICdGJyB9OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR180NDBTUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKQpAQCAtMTQ5LDYgKzE1MCw3IEBACiAJIkkyQyAoQWRkciAweDU0KSIsCiAJIkkyQyAoQWRkciAweDUwKSIsCiB9Oworc3RhdGljIGNoYXIgYm9vdHN0cmFwX2NoYXJbXSA9IHsgJ0EnLCAnQicsICdDJywgJ0QnfTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKQpAQCAtMTYzLDYgKzE2NSw3IEBACiAJIlBDSSIsCiAJIkkyQyAoQWRkciAweDUyKSIsCiB9Oworc3RhdGljIGNoYXIgYm9vdHN0cmFwX2NoYXJbXSA9IHsgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdHJywgJ0YnLCAnSCcgfTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCkBAIC0xNzcsNiArMTgwLDcgQEAKIAkiUENJIiwKIAkiSTJDIChBZGRyIDB4NTIpIiwKIH07CitzdGF0aWMgY2hhciBib290c3RyYXBfY2hhcltdID0geyAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0cnLCAnRicsICdIJyB9OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR180MDVFWikKQEAgLTE5OSw2ICsyMDMsOCBAQAogCSJTUEkgKHNsb3cpIiwKIAkiSTJDIChBZGRyIDB4NTApIiwKIH07CitzdGF0aWMgY2hhciBib290c3RyYXBfY2hhcltdID0geyAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgXAorCQkJCSAnSScsICd4JywgJ0snLCAnTCcsICdNJywgJ04nLCAnTycsICdQJyB9OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFNEUjBfUElOU1RQX1NISUZUKQpAQCAtNDI3LDcgKzQzMyw3IEBACiAJcHJpbnRmICgiICAgICAgIEkyQyBib290IEVFUFJPTSAlc2FibGVkXG4iLCBpMmNfYm9vdHJvbV9lbmFibGVkKCkgPyAiZW4iIDogImRpcyIpOwogI2VuZGlmCS8qIEkyQ19CT09UUk9NICovCiAjaWYgZGVmaW5lZChTRFIwX1BJTlNUUF9TSElGVCkKLQlwcmludGYgKCIgICAgICAgQm9vdHN0cmFwIE9wdGlvbiAlYyAtICIsIChjaGFyKWJvb3RzdHJhcF9vcHRpb24oKSArICdBJyk7CisJcHJpbnRmICgiICAgICAgIEJvb3RzdHJhcCBPcHRpb24gJWMgLSAiLCBib290c3RyYXBfY2hhcltib290c3RyYXBfb3B0aW9uKCldKTsKIAlwcmludGYgKCJCb290IFJPTSBMb2NhdGlvbiAlc1xuIiwgYm9vdHN0cmFwX3N0cltib290c3RyYXBfb3B0aW9uKCldKTsKICNlbmRpZgkvKiBTRFIwX1BJTlNUUF9TSElGVCAqLwogCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L25kZmMuYyBiL2NwdS9wcGM0eHgvbmRmYy5jCmluZGV4IGIxOThmZjQuLmY2M2ZjNzkgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvbmRmYy5jCisrKyBiL2NwdS9wcGM0eHgvbmRmYy5jCkBAIC0zLDcgKzMsNyBAQAogICogICBQbGF0Zm9ybSBpbmRlcGVuZGVuZCBkcml2ZXIgZm9yIE5ERkMgKE5hbkQgRmxhc2ggQ29udHJvbGxlcikKICAqICAgaW50ZWdyYXRlZCBpbnRvIEVQNDQwIGNvcmVzCiAgKgotICogKEMpIENvcHlyaWdodCAyMDA2CisgKiAoQykgQ29weXJpZ2h0IDIwMDYtMjAwNwogICogU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgogICoKICAqIEJhc2VkIG9uIG9yaWdpbmFsIHdvcmsgYnkKQEAgLTMzLDEyICszMywxNSBAQAogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkgJiYgIWRlZmluZWQoQ0ZHX05BTkRfTEVHQUNZKSAmJiBcCiAJKGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikgfHwJICAgICBcCi0JIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKSkKKwkgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpIHx8CSAgICAgXAorCSBkZWZpbmVkKENPTkZJR180MDVFWikpCiAKICNpbmNsdWRlIDxuYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25kZmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8cHBjNDQwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8cHBjNHh4Lmg+CiAKIHN0YXRpYyB1OCBod2N0bCA9IDA7CiAKQEAgLTY5LDExICs3MiwxMSBAQAogCXVsb25nIGJhc2UgPSAodWxvbmcpIHRoaXMtPklPX0FERFJfVyAmIDB4ZmZmZmZmZmM7CiAKIAlpZiAoaHdjdGwgJiAweDEpCi0JCW91dDgoYmFzZSArIE5ERkNfQ01ELCBieXRlKTsKKwkJb3V0XzgoKHU4ICopKGJhc2UgKyBOREZDX0NNRCksIGJ5dGUpOwogCWVsc2UgaWYgKGh3Y3RsICYgMHgyKQotCQlvdXQ4KGJhc2UgKyBOREZDX0FMRSwgYnl0ZSk7CisJCW91dF84KCh1OCAqKShiYXNlICsgTkRGQ19BTEUpLCBieXRlKTsKIAllbHNlCi0JCW91dDgoYmFzZSArIE5ERkNfREFUQSwgYnl0ZSk7CisJCW91dF84KCh1OCAqKShiYXNlICsgTkRGQ19EQVRBKSwgYnl0ZSk7CiB9CiAKIHN0YXRpYyB1X2NoYXIgbmRmY19yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGRpbmZvKQpAQCAtODEsNyArODQsNyBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGRpbmZvLT5wcml2OwogCXVsb25nIGJhc2UgPSAodWxvbmcpIHRoaXMtPklPX0FERFJfVyAmIDB4ZmZmZmZmZmM7CiAKLQlyZXR1cm4gKGluOChiYXNlICsgTkRGQ19EQVRBKSk7CisJcmV0dXJuIChpbl84KCh1OCAqKShiYXNlICsgTkRGQ19EQVRBKSkpOwogfQogCiBzdGF0aWMgaW50IG5kZmNfZGV2X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkaW5mbykKQEAgLTg5LDE3ICs5Miw0MSBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGRpbmZvLT5wcml2OwogCXVsb25nIGJhc2UgPSAodWxvbmcpIHRoaXMtPklPX0FERFJfVyAmIDB4ZmZmZmZmZmM7CiAKLQl3aGlsZSAoIShpbjMyKGJhc2UgKyBOREZDX1NUQVQpICYgTkRGQ19TVEFUX0lTX1JFQURZKSkKKwl3aGlsZSAoIShpbl9iZTMyKCh1MzIgKikoYmFzZSArIE5ERkNfU1RBVCkpICYgTkRGQ19TVEFUX0lTX1JFQURZKSkKIAkJOwogCiAJcmV0dXJuIDE7CiB9CiAKLSNpZm5kZWYgQ09ORklHX05BTkRfU1BMCi0vKgotICogRG9uJ3QgdXNlIHRoZXNlIHNwZWVkdXAgZnVuY3Rpb25zIGluIE5BTkQgYm9vdCBpbWFnZSwgc2luY2UgdGhlIGltYWdlCi0gKiBoYXMgdG8gZml0IGludG8gNGtCeXRlLgotICovCitzdGF0aWMgdm9pZCBuZGZjX2VuYWJsZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIGludCBtb2RlKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGRpbmZvLT5wcml2OworCXVsb25nIGJhc2UgPSAodWxvbmcpIHRoaXMtPklPX0FERFJfVyAmIDB4ZmZmZmZmZmM7CisJdTMyIGNjcjsKKworCWNjciA9IGluX2JlMzIoKHUzMiAqKShiYXNlICsgTkRGQ19DQ1IpKTsKKwljY3IgfD0gTkRGQ19DQ1JfUkVTRVRfRUNDOworCW91dF9iZTMyKCh1MzIgKikoYmFzZSArIE5ERkNfQ0NSKSwgY2NyKTsKK30KKworc3RhdGljIGludCBuZGZjX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGRpbmZvLAorCQkJICAgICAgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZGluZm8tPnByaXY7CisJdWxvbmcgYmFzZSA9ICh1bG9uZykgdGhpcy0+SU9fQUREUl9XICYgMHhmZmZmZmZmYzsKKwl1MzIgZWNjOworCXU4ICpwID0gKHU4ICopJmVjYzsKKworCWVjYyA9IGluX2JlMzIoKHUzMiAqKShiYXNlICsgTkRGQ19FQ0MpKTsKKworCS8qIFRoZSBOREZDIHVzZXMgU21hcnQgTWVkaWEgKFNNQykgYnl0ZXMgb3JkZXIKKwkgKi8KKwllY2NfY29kZVswXSA9IHBbMl07CisJZWNjX2NvZGVbMV0gPSBwWzFdOworCWVjY19jb2RlWzJdID0gcFszXTsKKworCXJldHVybiAwOworfQogCiAvKgogICogU3BlZWR1cHMgZm9yIGJ1ZmZlciByZWFkL3dyaXRlL3ZlcmlmeQpAQCAtMTE1LDkgKzE0MiwxNCBAQAogCXVpbnQzMl90ICpwID0gKHVpbnQzMl90ICopIGJ1ZjsKIAogCWZvciAoO2xlbiA+IDA7IGxlbiAtPSA0KQotCQkqcCsrID0gaW4zMihiYXNlICsgTkRGQ19EQVRBKTsKKwkJKnArKyA9IGluX2JlMzIoKHUzMiAqKShiYXNlICsgTkRGQ19EQVRBKSk7CiB9CiAKKyNpZm5kZWYgQ09ORklHX05BTkRfU1BMCisvKgorICogRG9uJ3QgdXNlIHRoZXNlIHNwZWVkdXAgZnVuY3Rpb25zIGluIE5BTkQgYm9vdCBpbWFnZSwgc2luY2UgdGhlIGltYWdlCisgKiBoYXMgdG8gZml0IGludG8gNGtCeXRlLgorICovCiBzdGF0aWMgdm9pZCBuZGZjX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkaW5mby0+cHJpdjsKQEAgLTEyNSw3ICsxNTcsNyBAQAogCXVpbnQzMl90ICpwID0gKHVpbnQzMl90ICopIGJ1ZjsKIAogCWZvciAoOyBsZW4gPiAwOyBsZW4gLT0gNCkKLQkJb3V0MzIoYmFzZSArIE5ERkNfREFUQSwgKnArKyk7CisJCW91dF9iZTMyKCh1MzIgKikoYmFzZSArIE5ERkNfREFUQSksICpwKyspOwogfQogCiBzdGF0aWMgaW50IG5kZmNfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKQEAgLTEzNSw3ICsxNjcsNyBAQAogCXVpbnQzMl90ICpwID0gKHVpbnQzMl90ICopIGJ1ZjsKIAogCWZvciAoOyBsZW4gPiAwOyBsZW4gLT0gNCkKLQkJaWYgKCpwKysgIT0gaW4zMihiYXNlICsgTkRGQ19EQVRBKSkKKwkJaWYgKCpwKysgIT0gaW5fYmUzMigodTMyICopKGJhc2UgKyBOREZDX0RBVEEpKSkKIAkJCXJldHVybiAtMTsKIAogCXJldHVybiAwOwpAQCAtMTUyLDggKzE4NCw4IEBACiAJdWxvbmcgYmFzZSA9ICh1bG9uZyluYW5kLT5JT19BRERSX1cgJiAweGZmZmZmZmZjOwogCiAJLyogU2V0IE5hbmRGbGFzaCBDb3JlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KLQkvKiAxY29sIHggMiByb3dzICovCi0Jb3V0MzIoYmFzZSArIE5ERkNfQ0NSLCAweDAwMDAwMDAwIHwgKGNzIDw8IDI0KSk7CisJLyogMSBjb2wgeCAyIHJvd3MgKi8KKwlvdXRfYmUzMigodTMyICopKGJhc2UgKyBOREZDX0NDUiksIDB4MDAwMDAwMDAgfCAoY3MgPDwgMjQpKTsKIH0KIAogaW50IGJvYXJkX25hbmRfaW5pdChzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kKQpAQCAtMTYxLDIzICsxOTMsMjUgQEAKIAlpbnQgY3MgPSAodWxvbmcpbmFuZC0+SU9fQUREUl9XICYgMHgwMDAwMDAwMzsKIAl1bG9uZyBiYXNlID0gKHVsb25nKW5hbmQtPklPX0FERFJfVyAmIDB4ZmZmZmZmZmM7CiAKLQluYW5kLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKLQogCW5hbmQtPmh3Y29udHJvbCAgPSBuZGZjX2h3Y29udHJvbDsKIAluYW5kLT5yZWFkX2J5dGUgID0gbmRmY19yZWFkX2J5dGU7CisJbmFuZC0+cmVhZF9idWYgICA9IG5kZmNfcmVhZF9idWY7CiAJbmFuZC0+d3JpdGVfYnl0ZSA9IG5kZmNfd3JpdGVfYnl0ZTsKIAluYW5kLT5kZXZfcmVhZHkgID0gbmRmY19kZXZfcmVhZHk7CiAKKwluYW5kLT5lY2Ntb2RlID0gTkFORF9FQ0NfSFczXzI1NjsKKwluYW5kLT5lbmFibGVfaHdlY2MgPSBuZGZjX2VuYWJsZV9od2VjYzsKKwluYW5kLT5jYWxjdWxhdGVfZWNjID0gbmRmY19jYWxjdWxhdGVfZWNjOworCW5hbmQtPmNvcnJlY3RfZGF0YSA9IG5hbmRfY29ycmVjdF9kYXRhOworCiAjaWZuZGVmIENPTkZJR19OQU5EX1NQTAogCW5hbmQtPndyaXRlX2J1ZiAgPSBuZGZjX3dyaXRlX2J1ZjsKLQluYW5kLT5yZWFkX2J1ZiAgID0gbmRmY19yZWFkX2J1ZjsKIAluYW5kLT52ZXJpZnlfYnVmID0gbmRmY192ZXJpZnlfYnVmOwogI2Vsc2UKIAkvKgogCSAqIFNldHVwIEVCQyAoQ1MwIG9ubHkgcmlnaHQgbm93KQogCSAqLwotCW10ZGNyKGViY2NmZ2EsIHhiY2ZnKTsKLQltdGRjcihlYmNjZmdkLCAweGI4NDAwMDAwKTsKKwltdGViYyhFQkMwX0NGRywgMHhiODQwMDAwMCk7CiAKIAltdGViYyhwYjBjciwgQ0ZHX0VCQ19QQjBDUik7CiAJbXRlYmMocGIwYXAsIENGR19FQkNfUEIwQVApOwpAQCAtMTg3LDcgKzIyMSw3IEBACiAJICogU2VsZWN0IHJlcXVpcmVkIE5BTkQgY2hpcCBpbiBOREZDCiAJICovCiAJYm9hcmRfbmFuZF9zZWxlY3RfZGV2aWNlKG5hbmQsIGNzKTsKLQlvdXQzMihiYXNlICsgTkRGQ19CQ0ZHMCArIChjcyA8PCAyKSwgMHg4MDAwMjIyMik7CisJb3V0X2JlMzIoKHUzMiAqKShiYXNlICsgTkRGQ19CQ0ZHMCArIChjcyA8PCAyKSksIDB4ODAwMDIyMjIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3N0YXJ0LlMgYi9jcHUvcHBjNHh4L3N0YXJ0LlMKaW5kZXggYTk2MDgzYy4uNzhkMDA0MiAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9zdGFydC5TCisrKyBiL2NwdS9wcGM0eHgvc3RhcnQuUwpAQCAtMTEwLDYgKzExMCwxMyBAQAogIyBlbmRpZgogI2VuZGlmIC8qIENGR19JTklUX0RDQUNIRV9DUyAqLwogCisjZGVmaW5lIGZ1bmN0aW9uX3Byb2xvZyhmdW5jX25hbWUpICAgICAgLnRleHQ7IFwKKwkJCQkJLmFsaWduIDI7IFwKKwkJCQkJLmdsb2JsIGZ1bmNfbmFtZTsgXAorCQkJCQlmdW5jX25hbWU6CisjZGVmaW5lIGZ1bmN0aW9uX2VwaWxvZyhmdW5jX25hbWUpICAgICAgLnR5cGUgZnVuY19uYW1lLEBmdW5jdGlvbjsgXAorCQkJCQkuc2l6ZSBmdW5jX25hbWUsLi1mdW5jX25hbWUKKwogLyogV2UgZG9uJ3Qgd2FudCB0aGUgIE1NVSB5ZXQuCiAqLwogI3VuZGVmCU1TUl9LRVJORUwKQEAgLTE0OCw3ICsxNTUsOSBAQAogCSAqIE5BTkQgVS1Cb290IGltYWdlIGlzIHN0YXJ0ZWQgZnJvbSBvZmZzZXQgMAogCSAqLwogCS50ZXh0CisjaWYgZGVmaW5lZChDT05GSUdfNDQwKQogCWJsCXJlY29uZmlnX3RsYjAKKyNlbmRpZgogCUdFVF9HT1QKIAlibAljcHVfaW5pdF9mCS8qIHJ1biBsb3ctbGV2ZWwgQ1BVIGluaXQgY29kZQkgICAoZnJvbSBGbGFzaCkgKi8KIAlibAlib2FyZF9pbml0X2YKQEAgLTM4OCw4ICszOTcsOSBAQAogMjoKIAogI2lmIGRlZmluZWQoQ09ORklHX05BTkRfU1BMKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQogCS8qCi0JICogRW5hYmxlIGludGVybmFsIFNSQU0KKwkgKiBFbmFibGUgaW50ZXJuYWwgU1JBTSAob25seSBvbiA0NDBFUHgvR1J4LCA0NDBFUC9HUiBoYXZlIG5vIE9DTSkKIAkgKi8KIAlsaXMJcjIsMHg3ZmZmCiAJb3JpCXIyLHIyLDB4ZmZmZgpAQCAtMzk5LDYgKzQwOSw0NSBAQAogCW1mZGNyCXIxLGlzcmFtMF9wbWVnCiAJYW5kCXIxLHIxLHIyCQkvKiBEaXNhYmxlIHB3ciBtZ210ICovCiAJbXRkY3IJaXNyYW0wX3BtZWcscjEKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKQorCS8qCisJICogT24gNDQwRVAgd2l0aCBubyBpbnRlcm5hbCBTUkFNLCB3ZSBzZXR1cCBTRFJBTSB2ZXJ5IGVhcmx5CisJICogYW5kIGNvcHkgdGhlIE5BTkRfU1BMIHRvIFNEUkFNIGFuZCBqdW1wIHRvIGl0CisJICovCisJLyogQ2xlYXIgRGNhY2hlIHRvIHVzZSBhcyBSQU0gKi8KKwlhZGRpcwlyMyxyMCxDRkdfSU5JVF9SQU1fQUREUkBoCisJb3JpCXIzLHIzLENGR19JTklUX1JBTV9BRERSQGwKKwlhZGRpcwlyNCxyMCxDRkdfSU5JVF9SQU1fRU5EQGgKKwlvcmkJcjQscjQsQ0ZHX0lOSVRfUkFNX0VOREBsCisJcmx3aW5tLiByNSxyNCwwLDI3LDMxCisJcmx3aW5tCXI1LHI0LDI3LDUsMzEKKwliZXEJLi5kX3JhbjMKKwlhZGRpCXI1LHI1LDB4MDAwMQorLi5kX3JhbjM6CisJbXRjdHIJcjUKKy4uZF9hZzM6CisJZGNieglyMCxyMworCWFkZGkJcjMscjMsMzIKKwliZG56CS4uZF9hZzMKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCS8qIFNldHVwIHRoZSBzdGFjayBpbiBpbnRlcm5hbCBTUkFNICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlsaXMJcjEsQ0ZHX0lOSVRfUkFNX0FERFJAaAorCW9yaQlyMSxyMSxDRkdfSU5JVF9TUF9PRkZTRVRAbAorCWxpCXIwLDAKKwlzdHd1CXIwLC00KHIxKQorCXN0d3UJcjAsLTQocjEpCQkvKiBUZXJtaW5hdGUgY2FsbCBjaGFpbiAqLworCisJc3R3dQlyMSwtOChyMSkJCS8qIFNhdmUgYmFjayBjaGFpbiBhbmQgbW92ZSBTUCAqLworCWxpcwlyMCxSRVNFVF9WRUNUT1JAaAkvKiBBZGRyZXNzIG9mIHJlc2V0IHZlY3RvciAqLworCW9yaQlyMCxyMCwgUkVTRVRfVkVDVE9SQGwKKwlzdHd1CXIxLC04KHIxKQkJLyogU2F2ZSBiYWNrIGNoYWluIGFuZCBtb3ZlIFNQICovCisJc3R3CXIwLCsxMihyMSkJCS8qIFNhdmUgcmV0dXJuIGFkZHIgKHVuZGVyZmxvdyB2ZWN0KSAqLworCXN5bmMKKwlibAllYXJseV9zZHJhbV9pbml0CisJc3luYworI2VuZGlmIC8qIENPTkZJR180NDBFUCAqLwogCiAJLyoKIAkgKiBDb3B5IFNQTCBmcm9tIGNhY2hlIGludG8gaW50ZXJuYWwgU1JBTQpAQCAtNDI5LDcgKzQ3OCw3IEBACiBzdGFydF9yYW06CiAJc3luYwogCWlzeW5jCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfTkFORF9TUEwgKi8KIAogCWJsCTNmCiAJYglfc3RhcnQKQEAgLTc4Myw3ICs4MzIsNyBAQAogCW10ZGNyCW9jbWRzY3IyLCByMyAgICAgICAgICAgIC8qIFNldCBEYXRhIFNpZGUgKi8KIAltdGRjcglvY21pc2NyMiwgcjMgICAgICAgICAgICAvKiBTZXQgSW5zdHJ1Y3Rpb24gU2lkZSAqLwogCWFkZGlzCXIzLDAsMHgwODAwICAgICAgICAgICAgIC8qIE9DTSBEYXRhIFBhcml0eSBEaXNhYmxlIC0gMSBXYWl0IFN0YXRlICovCi0JbXRkY3IJb2NtZHNpc2RwYyxyNAorCW10ZGNyCW9jbWRzaXNkcGMscjMKIAogCWlzeW5jCiAjZWxzZSAvKiBDT05GSUdfNDA1RVogKi8KQEAgLTgxMCw2ICs4NTksMzggQEAKICNlbmRpZiAvKiBDT05GSUdfNDA1RVogKi8KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX05BTkRfU1BMCisJLyoKKwkgKiBDb3B5IFNQTCBmcm9tIGNhY2hlIGludG8gaW50ZXJuYWwgU1JBTQorCSAqLworCWxpCXI0LChDRkdfTkFORF9CT09UX1NQTF9TSVpFID4+IDIpIC0gMQorCW10Y3RyCXI0CisJbGlzCXIyLENGR19OQU5EX0JPT1RfU1BMX1NSQ0BoCisJb3JpCXIyLHIyLENGR19OQU5EX0JPT1RfU1BMX1NSQ0BsCisJbGlzCXIzLENGR19OQU5EX0JPT1RfU1BMX0RTVEBoCisJb3JpCXIzLHIzLENGR19OQU5EX0JPT1RfU1BMX0RTVEBsCitzcGxfbG9vcDoKKwlsd3p1CXI0LDQocjIpCisJc3R3dQlyNCw0KHIzKQorCWJkbnoJc3BsX2xvb3AKKworCS8qCisJICogSnVtcCB0byBjb2RlIGluIFJBTQorCSAqLworCWJsCTAwZgorMDA6CW1mbHIJcjEwCisJbGlzCXIzLChDRkdfTkFORF9CT09UX1NQTF9TUkMgLSBDRkdfTkFORF9CT09UX1NQTF9EU1QpQGgKKwlvcmkJcjMscjMsKENGR19OQU5EX0JPT1RfU1BMX1NSQyAtIENGR19OQU5EX0JPT1RfU1BMX0RTVClAbAorCXN1YglyMTAscjEwLHIzCisJYWRkaQlyMTAscjEwLDI4CisJbXRscglyMTAKKwlibHIKKworc3RhcnRfcmFtOgorCXN5bmMKKwlpc3luYworI2VuZGlmIC8qIENPTkZJR19OQU5EX1NQTCAqLworCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCS8qIFNldHVwIHRlbXBvcmFyeSBzdGFjayBpbiBEQ0FDSEUgb3IgT0NNIGlmIG5lZWRlZCBmb3IgU0RSQU0gU1BELiAqLwogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTkyMCwxMiArMTAwMSwxNiBAQAogCXN0dwlyMCwgKzEyKHIxKQkJLyogU2F2ZSByZXR1cm4gYWRkciAodW5kZXJmbG93IHZlY3QpICovCiAjZW5kaWYgLyogIShDRkdfSU5JVF9EQ0FDSEVfQ1MJfHwgIUNGR19URU1fU1RBQ0tfT0NNKSAqLwogCisjaWZkZWYgQ09ORklHX05BTkRfU1BMCisJYmwJbmFuZF9ib290CQkvKiB3aWxsIG5vdCByZXR1cm4gKi8KKyNlbHNlCiAJR0VUX0dPVAkJCS8qIGluaXRpYWxpemUgR09UIGFjY2VzcwkJCSovCiAKIAlibAljcHVfaW5pdF9mCS8qIHJ1biBsb3ctbGV2ZWwgQ1BVIGluaXQgY29kZQkgICAoZnJvbSBGbGFzaCkgKi8KIAogCS8qIE5FVkVSIFJFVFVSTlMhICovCiAJYmwJYm9hcmRfaW5pdF9mCS8qIHJ1biBmaXJzdCBwYXJ0IG9mIGluaXQgY29kZSAoZnJvbSBGbGFzaCkJKi8KKyNlbmRpZiAvKiBDT05GSUdfTkFORF9TUEwgKi8KIAogI2VuZGlmCS8qIENPTkZJR180MDVHUCB8fCBDT05GSUdfNDA1Q1IgfHwgQ09ORklHXzQwNSB8fCBDT05GSUdfNDA1RVAgKi8KIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMTM3LDI3ICsxMjIyLDkgQEAKIAlsd3oJcjEsR1BSMShyMSkKIAlTWU5DCiAJcmZjaQotI2VuZGlmIC8qIENPTkZJR19OQU5EX1NQTCAqLwogCiAvKiBDYWNoZSBmdW5jdGlvbnMuCiAqLwotaW52YWxpZGF0ZV9pY2FjaGU6Ci0JaWNjY2kJcjAscjAJCQkvKiBmb3IgNDA1LCBpY2NjaSBpbnZhbGlkYXRlcyB0aGUgKi8KLQlibHIJCQkJLyogICBlbnRpcmUgSSBjYWNoZSAqLwotCi1pbnZhbGlkYXRlX2RjYWNoZToKLQlhZGRpCXI2LDAsMHgwMDAwCQkvKiBjbGVhciBHUFIgNiAqLwotCS8qIERvIGxvb3AgZm9yICMgb2YgZGNhY2hlIGNvbmdydWVuY2UgY2xhc3Nlcy4gKi8KLQlsaXMJcjcsIChDRkdfRENBQ0hFX1NJWkUgLyBDRkdfQ0FDSEVMSU5FX1NJWkUgLyAyKUBoYQkvKiBUQlMgZm9yIGxhcmdlIHNpemVkIGNhY2hlICovCi0Jb3JpCXI3LCByNywgKENGR19EQ0FDSEVfU0laRSAvIENGR19DQUNIRUxJTkVfU0laRSAvIDIpQGwKLQkJCQkJLyogTk9URTogZGNjY2kgaW52YWxpZGF0ZXMgYm90aCAqLwotCW10Y3RyCXI3CQkJLyogd2F5cyBpbiB0aGUgRCBjYWNoZSAqLwotLi5kY2xvb3A6Ci0JZGNjY2kJMCxyNgkJCS8qIGludmFsaWRhdGUgbGluZSAqLwotCWFkZGkJcjYscjYsIENGR19DQUNIRUxJTkVfU0laRSAvKiBidW1wIHRvIG5leHQgbGluZSAqLwotCWJkbnoJLi5kY2xvb3AKLQlibHIKLQogZmx1c2hfZGNhY2hlOgogCWFkZGlzCXI5LHIwLDB4MDAwMgkJLyogc2V0IG1hc2sgZm9yIEVFIGFuZCBDRSBtc3IgYml0cyAqLwogCW9yaQlyOSxyOSwweDgwMDAKQEAgLTEyNTUsMjQgKzEzMjIsNiBAQAogCWJscgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIEZ1bmN0aW9uOgkgaW44ICovCi0vKiBEZXNjcmlwdGlvbjoJIElucHV0IDggYml0cyAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLmdsb2JsCWluOAotaW44OgotCWxieglyMywweDAwMDAocjMpCi0JYmxyCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogRnVuY3Rpb246CSBvdXQ4ICovCi0vKiBEZXNjcmlwdGlvbjoJIE91dHB1dCA4IGJpdHMgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCS5nbG9ibAlvdXQ4Ci1vdXQ4OgotCXN0YglyNCwweDAwMDAocjMpCi0JYmxyCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb246CSBvdXQxNiAqLwogLyogRGVzY3JpcHRpb246CSBPdXRwdXQgMTYgYml0cyAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMjkxLDE1ICsxMzQwLDYgQEAKIAlibHIKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBGdW5jdGlvbjoJIG91dDMyICovCi0vKiBEZXNjcmlwdGlvbjoJIE91dHB1dCAzMiBiaXRzICovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQkuZ2xvYmwJb3V0MzIKLW91dDMyOgotCXN0dwlyNCwweDAwMDAocjMpCi0JYmxyCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb246CSBvdXQzMnIgKi8KIC8qIERlc2NyaXB0aW9uOgkgQnl0ZSByZXZlcnNlIGFuZCBvdXRwdXQgMzIgYml0cyAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMzI3LDE1ICsxMzY3LDYgQEAKIAlibHIKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBGdW5jdGlvbjoJIGluMzIgKi8KLS8qIERlc2NyaXB0aW9uOgkgSW5wdXQgMzIgYml0cyAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLmdsb2JsCWluMzIKLWluMzI6Ci0JbHd6CTMsMHgwMDAwKDMpCi0JYmxyCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb246CSBpbjMyciAqLwogLyogRGVzY3JpcHRpb246CSBJbnB1dCAzMiBiaXRzIGFuZCBieXRlIHJldmVyc2UgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTM3Nyw5ICsxNDA4LDYgQEAKIAlzeW5jCiAJYmxyCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmbmRlZiBDT05GSUdfTkFORF9TUEwKIC8qCiAgKiB2b2lkIHJlbG9jYXRlX2NvZGUgKGFkZHJfc3AsIGdkLCBhZGRyX21vbmkpCiAgKgpAQCAtMTY0NCw4ICsxNjcyLDEwNSBAQAogCXN0dwlyMCwgNChyNykKIAogCWJscgorCisjaWYgZGVmaW5lZChDT05GSUdfNDQwKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBkY2J6X2FyZWEuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJZnVuY3Rpb25fcHJvbG9nKGRjYnpfYXJlYSkKKwlybHdpbm0uIHI1LHI0LDAsMjcsMzEKKwlybHdpbm0gIHI1LHI0LDI3LDUsMzEKKwliZXEgICAgIC4uZF9yYTIKKwlhZGRpICAgIHI1LHI1LDB4MDAwMQorLi5kX3JhMjptdGN0ciAgIHI1CisuLmRfYWcyOmRjYnogICAgcjAscjMKKwlhZGRpICAgIHIzLHIzLDMyCisJYmRueiAgICAuLmRfYWcyCisJc3luYworCWJscgorCWZ1bmN0aW9uX2VwaWxvZyhkY2J6X2FyZWEpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgZGZsdXNoLiAgQXNzdW1lIDMySyBhdCB2ZWN0b3IgYWRkcmVzcyBpcyBjYWNoYWJsZS4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlmdW5jdGlvbl9wcm9sb2coZGZsdXNoKQorCW1mbXNyICAgcjkKKwlybHdpbm0gIHI4LHI5LDAsMTUsMTMKKwlybHdpbm0gIHI4LHI4LDAsMTcsMTUKKwltdG1zciAgIHI4CisJYWRkaSAgICByMyxyMCwweDAwMDAKKwltdHNwciAgIGR2bGltLHIzCisJbWZzcHIgICByMyxpdnByCisJYWRkaSAgICByNCxyMCwxMDI0CisJbXRjdHIgICByNAorLi5kZmx1c2hfbG9vcDoKKwlsd3ogICAgIHI2LDB4MChyMykKKwlhZGRpICAgIHIzLHIzLDMyCisJYmRueiAgICAuLmRmbHVzaF9sb29wCisJYWRkaSAgICByMyxyMywtMzIKKwltdGN0ciAgIHI0CisuLmFnOiAgIGRjYmYgICAgcjAscjMKKwlhZGRpICAgIHIzLHIzLC0zMgorCWJkbnogICAgLi5hZworCXN5bmMKKwltdG1zciAgIHI5CisJYmxyCisJZnVuY3Rpb25fZXBpbG9nKGRmbHVzaCkKKyNlbmRpZiAvKiBDT05GSUdfNDQwICovCiAjZW5kaWYgLyogQ09ORklHX05BTkRfU1BMICovCiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogRnVuY3Rpb246CSBpbjggKi8KKy8qIERlc2NyaXB0aW9uOgkgSW5wdXQgOCBiaXRzICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkuZ2xvYmwJaW44Citpbjg6CisJbGJ6CXIzLDB4MDAwMChyMykKKwlibHIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBGdW5jdGlvbjoJIG91dDggKi8KKy8qIERlc2NyaXB0aW9uOgkgT3V0cHV0IDggYml0cyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLmdsb2JsCW91dDgKK291dDg6CisJc3RiCXI0LDB4MDAwMChyMykKKwlibHIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBGdW5jdGlvbjoJIG91dDMyICovCisvKiBEZXNjcmlwdGlvbjoJIE91dHB1dCAzMiBiaXRzICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkuZ2xvYmwJb3V0MzIKK291dDMyOgorCXN0dwlyNCwweDAwMDAocjMpCisJYmxyCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogRnVuY3Rpb246CSBpbjMyICovCisvKiBEZXNjcmlwdGlvbjoJIElucHV0IDMyIGJpdHMgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS5nbG9ibAlpbjMyCitpbjMyOgorCWx3egkzLDB4MDAwMCgzKQorCWJscgorCitpbnZhbGlkYXRlX2ljYWNoZToKKwlpY2NjaQlyMCxyMAkJCS8qIGZvciA0MDUsIGljY2NpIGludmFsaWRhdGVzIHRoZSAqLworCWJscgkJCQkvKiAgIGVudGlyZSBJIGNhY2hlICovCisKK2ludmFsaWRhdGVfZGNhY2hlOgorCWFkZGkJcjYsMCwweDAwMDAJCS8qIGNsZWFyIEdQUiA2ICovCisJLyogRG8gbG9vcCBmb3IgIyBvZiBkY2FjaGUgY29uZ3J1ZW5jZSBjbGFzc2VzLiAqLworCWxpcwlyNywgKENGR19EQ0FDSEVfU0laRSAvIENGR19DQUNIRUxJTkVfU0laRSAvIDIpQGhhCS8qIFRCUyBmb3IgbGFyZ2Ugc2l6ZWQgY2FjaGUgKi8KKwlvcmkJcjcsIHI3LCAoQ0ZHX0RDQUNIRV9TSVpFIC8gQ0ZHX0NBQ0hFTElORV9TSVpFIC8gMilAbAorCQkJCQkvKiBOT1RFOiBkY2NjaSBpbnZhbGlkYXRlcyBib3RoICovCisJbXRjdHIJcjcJCQkvKiB3YXlzIGluIHRoZSBEIGNhY2hlICovCisuLmRjbG9vcDoKKwlkY2NjaQkwLHI2CQkJLyogaW52YWxpZGF0ZSBsaW5lICovCisJYWRkaQlyNixyNiwgQ0ZHX0NBQ0hFTElORV9TSVpFIC8qIGJ1bXAgdG8gbmV4dCBsaW5lICovCisJYmRuegkuLmRjbG9vcAorCWJscgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBQUEM0MDVFUCBzcGVjaWZpYyBzdHVmZgkJCQkJCSAgKi8KQEAgLTE4OTIsMTMgKzIwMTcsNiBAQAogI2VuZGlmIC8qIENPTkZJR180MDVFUCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfNDQwKQotI2RlZmluZSBmdW5jdGlvbl9wcm9sb2coZnVuY19uYW1lKQkudGV4dDsgXAotCQkJCQkuYWxpZ24gMjsgXAotCQkJCQkuZ2xvYmwgZnVuY19uYW1lOyBcCi0JCQkJCWZ1bmNfbmFtZToKLSNkZWZpbmUgZnVuY3Rpb25fZXBpbG9nKGZ1bmNfbmFtZSkJLnR5cGUgZnVuY19uYW1lLEBmdW5jdGlvbjsgXAotCQkJCQkuc2l6ZSBmdW5jX25hbWUsLi1mdW5jX25hbWUKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBtdHRsYjMuCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xOTQ2LDQ3ICsyMDY0LDQgQEAKIAlUTEJSRSgzLDMsMCkKIAlibHIKIAlmdW5jdGlvbl9lcGlsb2cobWZ0bGIxKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGRjYnpfYXJlYS4KLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlmdW5jdGlvbl9wcm9sb2coZGNiel9hcmVhKQotCXJsd2lubS4gcjUscjQsMCwyNywzMQotCXJsd2lubQlyNSxyNCwyNyw1LDMxCi0JYmVxCS4uZF9yYTIKLQlhZGRpCXI1LHI1LDB4MDAwMQotLi5kX3JhMjptdGN0cglyNQotLi5kX2FnMjpkY2J6CXIwLHIzCi0JYWRkaQlyMyxyMywzMgotCWJkbnoJLi5kX2FnMgotCXN5bmMKLQlibHIKLQlmdW5jdGlvbl9lcGlsb2coZGNiel9hcmVhKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGRmbHVzaC4gIEFzc3VtZSAzMksgYXQgdmVjdG9yIGFkZHJlc3MgaXMgY2FjaGFibGUuCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JZnVuY3Rpb25fcHJvbG9nKGRmbHVzaCkKLQltZm1zcglyOQotCXJsd2lubQlyOCxyOSwwLDE1LDEzCi0Jcmx3aW5tCXI4LHI4LDAsMTcsMTUKLQltdG1zcglyOAotCWFkZGkJcjMscjAsMHgwMDAwCi0JbXRzcHIJZHZsaW0scjMKLQltZnNwcglyMyxpdnByCi0JYWRkaQlyNCxyMCwxMDI0Ci0JbXRjdHIJcjQKLS4uZGZsdXNoX2xvb3A6Ci0JbHd6CXI2LDB4MChyMykKLQlhZGRpCXIzLHIzLDMyCi0JYmRuegkuLmRmbHVzaF9sb29wCi0JYWRkaQlyMyxyMywtMzIKLQltdGN0cglyNAotLi5hZzoJZGNiZglyMCxyMwotCWFkZGkJcjMscjMsLTMyCi0JYmRuegkuLmFnCi0Jc3luYwotCW10bXNyCXI5Ci0JYmxyCi0JZnVuY3Rpb25fZXBpbG9nKGRmbHVzaCkKICNlbmRpZiAvKiBDT05GSUdfNDQwICovCmRpZmYgLS1naXQgYS9kaXNrL3BhcnQuYyBiL2Rpc2svcGFydC5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYWNjMWE3NC4uMjU1YjE0MAotLS0gYS9kaXNrL3BhcnQuYworKysgYi9kaXNrL3BhcnQuYwpAQCAtMTgwLDYgKzE4MCw3IEBACiAgICAgIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NDU0kpCXx8IFwKICAgICAgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfVVNCKQl8fCBcCiAgICAgIGRlZmluZWQoQ09ORklHX01NQykJCXx8IFwKKyAgICAgKGRlZmluZWQoQ09ORklHX01NQykgJiYgZGVmaW5lZChDT05GSUdfTFBDMjI5MikpIHx8IFwKICAgICAgZGVmaW5lZChDT05GSUdfU1lTVEVNQUNFKSAgICAgICAgICApCiAKICNpZiBkZWZpbmVkKENPTkZJR19NQUNfUEFSVElUSU9OKSB8fCBcCkBAIC0yMTksNyArMjIwLDggQEAKIH0KIAogCi1pbnQgZ2V0X3BhcnRpdGlvbl9pbmZvIChibG9ja19kZXZfZGVzY190ICpkZXZfZGVzYywgaW50IHBhcnQsIGRpc2tfcGFydGl0aW9uX3QgKmluZm8pCitpbnQgZ2V0X3BhcnRpdGlvbl9pbmZvIChibG9ja19kZXZfZGVzY190ICpkZXZfZGVzYywgaW50IHBhcnQKKwkJCQkJLCBkaXNrX3BhcnRpdGlvbl90ICppbmZvKQogewogCQlzd2l0Y2ggKGRldl9kZXNjLT5wYXJ0X3R5cGUpIHsKICNpZmRlZiBDT05GSUdfTUFDX1BBUlRJVElPTgpAQCAtMzI1LDcgKzMyNyw4IEBACiAKIAogI2Vsc2UJLyogbmVpdGhlciBNQUMgbm9yIERPUyBub3IgSVNPIHBhcnRpdGlvbiBjb25maWd1cmVkICovCi0jIGVycm9yIG5laXRoZXIgQ09ORklHX01BQ19QQVJUSVRJT04gbm9yIENPTkZJR19ET1NfUEFSVElUSU9OIG5vciBDT05GSUdfSVNPX1BBUlRJVElPTiBjb25maWd1cmVkIQorIyBlcnJvciBuZWl0aGVyIENPTkZJR19NQUNfUEFSVElUSU9OIG5vciBDT05GSUdfRE9TX1BBUlRJVElPTgorIyBlcnJvciBub3IgQ09ORklHX0lTT19QQVJUSVRJT04gY29uZmlndXJlZCEKICNlbmRpZgogCiAjZW5kaWYJLyogKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSURFKSB8fCBDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NDU0kpICovCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLm1wYzgzMTNlcmRiIGIvZG9jL1JFQURNRS5tcGM4MzEzZXJkYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWQ0Y2M3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5tcGM4MzEzZXJkYgpAQCAtMCwwICsxLDgzIEBACitGcmVlc2NhbGUgTVBDODMxM0VSREIgQm9hcmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuCUJvYXJkIFN3aXRjaGVzIGFuZCBKdW1wZXJzCisKKwlTVzMgaXMgdXNlZCB0byBzZXQgQ0ZHX1JFU0VUX1NPVVJDRS4KKworCVRvIGJvb3QgdGhlIGltYWdlIGF0IDB4RkUwMDAwMDAgaW4gTk9SIGZsYXNoLCB1c2UgdGhlc2UgRElQCisJc3dpdGNoZSBzZXR0aW5ncyBmb3IgU1czIFNXNDoKKworCSstLS0tLS0rCSstLS0tLS0rCisJfCAgICAgIHwJfCAqKioqIHwKKwl8ICoqKiogfAl8ICAgICAgfAorCSstLS0tLS0rIE9OCSstLS0tLS0rIE9OCisJICA0MzIxCQkgIDQzMjEKKwkod2hlcmUgdGhlICcqJyBpbmRpY2F0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB0YWIgb2YgdGhlIHN3aXRjaC4pCisKKzIuCU1lbW9yeSBNYXAKKwlUaGUgbWVtb3J5IG1hcCBsb29rcyBsaWtlIHRoaXM6CisKKwkweDAwMDBfMDAwMAkweDA3ZmZfZmZmZglERFIJCSAxMjhNCisJMHg4MDAwXzAwMDAJMHg4ZmZmX2ZmZmYJUENJIE1FTQkJIDI1Nk0KKwkweDkwMDBfMDAwMAkweDlmZmZfZmZmZglQQ0lfTU1JTwkgMjU2TQorCTB4ZTAwMF8wMDAwCTB4ZTAwZl9mZmZmCUlNTVIJCSAxTQorCTB4ZTIwMF8wMDAwCTB4ZTIwZl9mZmZmCVBDSSBJTwkgCSAxNk0KKwkweGUyODBfMDAwMAkweGUyODBfN2ZmZglOQU5EIEZMQVNIIChDUzEpIDMySworCTB4ZjAwMF8wMDAwCTB4ZjAwMV9mZmZmCVZTQzczODUgKENTMikJIDEyOEsKKwkweGZhMDBfMDAwMAkweGZhMDBfN2ZmZglCb2FyZCBTdGF0dXMvCSAzMksKKwkJCQkJTEVEIENvbnRyb2wgKENTMykKKwkweGZlMDBfMDAwMAkweGZlN2ZfZmZmZglOT1IgRkxBU0ggKENTMCkJIDhNCisKKzMuCURlZmluaXRpb25zCisKKzMuMQlFeHBsYW5hdGlvbiBvZiBORVcgZGVmaW5pdGlvbnMgaW46CisKKwlpbmNsdWRlL2NvbmZpZ3MvTVBDODMxM0VSREIuaAorCisJQ09ORklHX01QQzgzeHgJCU1QQzgzeHggZmFtaWx5CisJQ09ORklHX01QQzgzMXgJCU1QQzgzMXggc3BlY2lmaWMKKwlDT05GSUdfTVBDODMxM0VSREIJTVBDODMxM0VSREIgYm9hcmQgc3BlY2lmaWMKKworNC4JQ29tcGlsYXRpb24KKworCUFzc3VtaW5nIHlvdSdyZSB1c2luZyBCQVNIIChvciBzaW1pbGFyKSBhcyB5b3VyIHNoZWxsOgorCisJZXhwb3J0IENST1NTX0NPTVBJTEU9eW91ci1jcm9zcy1jb21waWxlci1wcmVmaXgtCisJbWFrZSBkaXN0Y2xlYW4KKwltYWtlIE1QQzgzMTNFUkRCXzMzX2NvbmZpZworCShvciBtYWtlIE1QQzgzMTNFUkRCXzY2X2NvbmZpZywgZGVwZW5kaW5nIG9uIHRoZSBzcGVlZCBvZgorCSB0aGUgb3NjaWxsYXRvciBvbiB5b3VyIGJvYXJkKQorCW1ha2UKKworNS4JRG93bmxvYWRpbmcgYW5kIEZsYXNoaW5nIEltYWdlcworCis1LjEJUmVmbGFzaCBVLWJvb3QgSW1hZ2UgdXNpbmcgVS1ib290CisKKwk9PnJ1biB0ZnRwZmxhc2gKKworCVlvdSBtYXkgd2FudCB0byB0cnkKKwk9PnRmdHBib290ICRsb2FkYWRkciAkdWJvb3QKKwlmaXJzdCwgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFRGVFAgbG9hZCB3aWxsIHN1Y2NlZWQgYmVmb3JlIGl0CisJZ29lcyBhaGVhZCBhbmQgd2lwZXMgb3V0IHlvdXIgY3VycmVudCBmaXJtd2FyZS4gIEFuZCBvZiBjb3Vyc2UsCisJaGF2ZSBhbiBhbHRlcm5hdGUgbWVhbnMgb2YgcHJvZ3JhbW1pbmcgdGhlIGZsYXNoIGF2YWlsYWJsZQorCWlmIHRoZSBuZXcgdS1ib290IGRvZXNuJ3QgYm9vdC4KKworNS4yCURvd25sb2FkaW5nIGFuZCBCb290aW5nIExpbnV4IEtlcm5lbAorCisJRW5zdXJlIHRoYXQgYWxsIG5ldHdvcmtpbmctcmVsYXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHNldAorCXByb3Blcmx5IChpbmNsdWRpbmcgaXBhZGRyLCBzZXJ2ZXJpcCwgZ2F0ZXdheWlwIChpZiBuZWVkZWQpLAorCW5ldG1hc2ssIGV0aGFkZHIsIGV0aDFhZGRyLCByb290cGF0aCAoaWYgdXNpbmcgTkZTIHJvb3QpLAorCWZkdGZpbGUsIGFuZCBib290ZmlsZSkuCisKKwlUaGVuLCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91CisJd2FudCBhbiBORlMgcm9vdCBvciBhIHJhbWRpc2sgcm9vdDoKKworCT0+cnVuIG5mc2Jvb3QKKwlvcgorCT0+cnVuIHJhbWJvb3QKKworNglOb3RlcworCisJQm9vdGluZyBmcm9tIE5BTkQgZmxhc2ggaXMgbm90IHlldCBzdXBwb3J0ZWQuCisJVGhlIGNvbnNvbGUgYmF1ZHJhdGUgZm9yIE1QQzgzMTNFUkRCIGlzIDExNTIwMGJwcy4KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubXBjODY0MWhwY24gYi9kb2MvUkVBRE1FLm1wYzg2NDFocGNuCmluZGV4IDNiODhmOGIuLmFjNTZjY2EgMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUubXBjODY0MWhwY24KKysrIGIvZG9jL1JFQURNRS5tcGM4NjQxaHBjbgpAQCAtOTYsMTQgKzk2LDE3IEBACiAKIAl0ZnRwIDEwMDAwMDAgdS1ib290LmJpbgogCXByb3RlY3Qgb2ZmIGFsbAotCWVyYXNlIGZmZjAwMDAwIGZmZmZmZmZmCi0JY3AuYiAxMDAwMDAwIGZmZjAwMTAwIDgwMDAwCisJZXJhc2UgZmZmMDAwMDAgKyRmaWxlc2l6ZQorCWNwLmIgMTAwMDAwMCBmZmYwMDAwMCAkZmlsZXNpemUKKworb3IgdXNlIHRmdHBmbGFzaCBjb21tYW5kOgorCXJ1biB0ZnRwZmxhc2gKIAogVG8gRmxhc2ggVS1ib290IGludG8gdGhlIGFsdGVybmF0aXZlIGJhbmsgKDB4RkY4MDAwMDAgLSAweEZGQkZGRkZGKToKIAogCXRmdHAgMTAwMDAwMCB1LWJvb3QuYmluCi0JZXJhc2UgZmZiMDAwMDAgZmZiZmZmZmYKLQljcC5iIDEwMDAwMDAgZmZiMDAxMDAgODAwMDAKKwllcmFzZSBmZmIwMDAwMCArJGZpbGVzaXplCisJY3AuYiAxMDAwMDAwIGZmYjAwMDAwICRmaWxlc2l6ZQogCiAKIDQuIE1lbW9yeSBNYXAKZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubmFuZCBiL2RvYy9SRUFETUUubmFuZAppbmRleCBiNTE3MWY0Li41YzMxODQ1IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLm5hbmQKKysrIGIvZG9jL1JFQURNRS5uYW5kCkBAIC0xOTIsMTIgKzE5Miw3IEBACiB0byBvbmx5IGJvYXJkLXNwZWNpZmljIGZpbGVzIGFuZCAtIHVuZm9ydHVuYXRlbHkgLSB0byB0aGUgRG9DIGNvZGUKIChzZWUgYmVsb3cpLiBBIG5ldyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGhhcyBiZWVuIGludHJvZHVjZWQ6CiBDRkdfTkFORF9MRUdBQ1ksIHdoaWNoIGhhcyB0byBiZSBkZWZpbmVkIGluIHRoZSBib2FyZCBjb25maWcgZmlsZSBpZgotdGhhdCBib2FyZCB1c2VzIGxlZ2FjeSBjb2RlLiBJZiBDRkdfTkFORF9MRUdBQ1kgaXMgZGVmaW5lZCwgdGhlIGJvYXJkCi1zcGVjaWZpYyBjb25maWcubWsgZmlsZSBzaG91bGQgYWxzbyBoYXZlICJCT0FSRExJQlMgPQotZHJpdmVycy9uYW5kX2xlZ2FjeS9saWJuYW5kX2xlZ2FjeS5hIi4gRm9yIGJvYXJkcyB1c2luZyB0aGUgbmV3IE5BTkQKLWFwcHJvYWNoIChQUENoYW1lbGVvbiBhbmQgbmV0c3RhciBhdCB0aGUgbW9tZW50KSBubyB2YXJpYWJsZSBpcwotbmVjZXNzYXJ5LCBidXQgdGhlIGNvbmZpZy5tayBzaG91bGQgaGF2ZSAiQk9BUkRMSUJTID0KLWRyaXZlcnMvbmFuZC9saWJuYW5kLmEiLgordGhhdCBib2FyZCB1c2VzIGxlZ2FjeSBjb2RlLgogCiBUaGUgbmVjZXNzYXJ5IGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gYWxsIGFmZmVjdGVkIGJvYXJkcywgYW5kIG5vCiBidWlsZCBicmVha2FnZSBoYXMgYmVlbiBpbnRyb2R1Y2VkLCBleGNlcHQgZm9yIE5FVFRBIGFuZCBORVRUQV9JU0ROCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLnNiYzg1NjAgYi9kb2MvUkVBRE1FLnNiYzg1NjAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNTkyZTMuLjAwMDAwMDAKLS0tIGEvZG9jL1JFQURNRS5zYmM4NTYwCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotVGhlIHBvcnQgd2FzIHRlc3RlZCBvbiBXaW5kIFJpdmVyIFN5c3RlbSBTYmM4NTYwIGJvYXJkIDx3d3cud2luZHJpdmVyLmNvbT4uCi1VLUJvb3Qgd2FzIGluc3RhbGxlZCBvbiB0aGUgZmxhc2ggbWVtb3J5IG9mIHRoZSBDUFUgY2FyZCAobm8gdGhlIFNPRElNTSkuCi0KLU5PVEU6IFBsZWFzZSBjb25maWd1cmUgdWJvb3QgY29tcGlsZSB0byB0aGUgcHJvcGVyIFBDSSBmcmVxdWVuY3kgYW5kCi1zZXR1cCB0aGUgYXBwcm9wcmlhdGUgRElQIHN3aXRjaCBzZXR0aW5ncy4KLQotU0JDODU2MCBib2FyZDoKLQotTWFrZSBzdXJlIGJvYXJkcyBzd2l0Y2hlcyBhcmUgc2V0IHRvIHRoZWlyIGFwcHJvcHJpYXRlIGNvbmRpdGlvbnMuCi1SZWZlciB0byB0aGUgRW5naW5lZXJpbmcgUmVmZXJlbmNlIEd1aWRlIEVSRy0wMDMwMC0wMDIuIE9mIHBhcnRpY3VsYXIKLWltcG9ydGFuY2UgYXJlOiAxKVR0aGUgc2V0dGluZ3MgZm9yIEpQNCAoSlA0IDEtMyBhbmQgMi00KSwgd2hpY2gKLXNlbGVjdCB0aGUgb24tYm9hcmQgRkxBU0ggZGV2aWNlIChJbnRlbCAyOEYxMjhKeCk7IDIpIFRoZSBzZXR0aW5ncwotZm9yIHRoZSBDbG9jayBTVzkgKDMzIE1IeiBvciA2NiBNSHopLgotCi0JTm90ZToJU1c5IFNldHRpbmdzOiA2NiBNSHoKLQkJNDoxIHJhdGlvIENDQiBjbG9ja3M6U1lTQ0xLCi0JCTM6MSByYXRpb24gZTUwMCBDb3JlOkNDQgotCQlwb3MxIC0gb24sIHBvczIgLSBvbiwgcG9zMyAtIG9mZiwgcG9zNCAtIG9uLCBwb3M1IC0gb2ZmLCBwb3M2IC0gb24KLQlOb3RlOglTVzkgU2V0dGluZ3M6IDMzIE1IegotCQk4OjEgcmF0aW8gQ0NCIGNsb2NrczpTWVNDTEsKLQkJMzoxIHJhdGlvbiBlNTAwIENvcmU6Q0NCCi0JCXBvczEgLSBvbiwgcG9zMiAtIG9uLCBwb3MzIC0gb24sIHBvczQgLSBvZmYsIHBvczUgLSBvZmYsIHBvczYgLSBvbgotCi0KLUZsYXNoaW5nIHRoZSBGTEFTSCBkZXZpY2Ugd2l0aCB0aGUgIldpbmQgUml2ZXIgSUNFIjoKLQotMSkgUHJvcGVybHkgY29ubmVjdCBhbmQgY29uZmlndXJlIHRoZSBXaW5kIFJpdmVyIElDRSB0byB0aGUKLSAgIHRhcmdldCBKVEFHIHBvcnQuIFRoaXMgaW5jbHVkZXMgcnVubmluZyB0aGUgU0JDODU2MCByZWdpc3RlciBzY3JpcHQuCi0gICBNYWtlIHN1cmUgdGFyZ2V0IG1lbW9yeSBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbi4KLQotMikgQnVpbGQgdGhlIHUtYm9vdCBpbWFnZToKLQltYWtlIGRpc3RjbGVhbgotCW1ha2UgU0JDODU2MF82Nl9jb25maWcgb3IgU0JDODU2MF8zM19jb25maWcKLQltYWtlIENST1NTX0NPTVBJTEU9Li4uL0VMREszLjAvcHBjXzh4eC0vIGFsbAotCi0gICBOb3RlOiByZWZlcmVuY2UgaXMgbWFkZSB0byB0aGUgRUxESzMuMCBjb21waWxlciBidXQgYW55IDg1eHggY3Jvc3MtY29tcGlsZXIKLQkgc2hvdWxkIHN1ZmZpY2UuCi0KLTMpIENvbnZlcnQgdGhlIHVib290ICguZWxmKSBmaWxlIHRvIGEgdWJvb3QuYmluIGZpbGUgKHVzaW5nIHZpc2lvbkNsaWNrIGNvbnZlcnRlcikuCi0gICBUaGUgYmluIGZpbGUgc2hvdWxkIGJlIGNvbnZlcnRlZCBmcm9tIGZmZmMwMDAwIHRvIGZmZmZmZmZmCi0KLTQpIFNldHVwIHRoZSBGbGFzaCBVdGlsaXR5ICh0b29scyBtZW51KSBmb3I6Ci0KLSAgIERldGVybWluZSB0aGUgY2xvY2sgc3BlZWQgb2YgdGhlIFBDSSBidXMgYW5kIHNldCBTVzkgYWNjb3JkaW5nbHkKLQlOb3RlOiB0aGUgc3BlZWQgb2YgdGhlIFBDSSBidXMgZGVmYXVsdHMgdG8gdGhlIHNsb3dlc3QgUENJIGNhcmQKLSAgIFBsYXlCYWNrIHRoZSAiZGVmYXVsdCIgcmVnaXN0ZXIgZmlsZSBmb3IgdGhlIFNCQzg1NjAKLSAgIFNlbGVjdCB0aGUgdWJvb3QuYmluIGZpbGUgd2l0aCB6ZXJvIGJpYXMKLSAgIFNlbGVjdCB0aGUgaW5pdGlhbGl6ZSBUYXJnZXQgcHJpb3IgdG8gcHJvZ3JhbW1pbmcKLSAgIFNlbGVjdCB0aGUgVjI4RjY0MEp4ICg4MTkyIHggOCkgMSBkZXZpY2UgRkxBU0ggQWxnb3JpdGhtCi0gICBTZWxlY3QgdGhlIGVyYXNlIGJhc2UgYWRkcmVzcyBmcm9tIEZGRkMwMDAwIHRvIEZGRkZGRkZGCi0gICBTZWxlY3QgdGhlIHN0YXJ0IGFkZHJlc3MgZnJvbSAwIHdpdGggc2l6ZSBvZiA0MDAwCi0KLTUpIEVyYXNlIGFuZCBQcm9ncmFtCmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCBkNjhjYmE2Li5jN2ZjYzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTMwLDcgKzMwLDcgQEAKIENPQkpTCT0gM2M1ODkubyA1NzAxcmxzLm8gYWxpNTEyeC5vIGF0bWVsX3VzYXJ0Lm8gXAogCSAgYmNtNTcweC5vIGJjbTU3MHhfYXV0b25lZy5vIGNmYl9jb25zb2xlLm8gY2ZpX2ZsYXNoLm8gXAogCSAgY3M4OTAwLm8gY3Q2OTAwMC5vIGRhdGFmbGFzaC5vIGRjMjExNHgubyBkbTkwMDB4Lm8gXAotCSAgZTEwMDAubyBlZXBybzEwMC5vIFwKKwkgIGUxMDAwLm8gZWVwcm8xMDAubyBlbmMyOGo2MC5vIFwKIAkgIGk4MDQyLm8gaW5jYS1pcF9zdy5vIGtleWJvYXJkLm8gXAogCSAgbGFuOTFjOTYubyBtYWNiLm8gXAogCSAgbmF0c2VtaS5vIG5lMjAwMC5vIG5ldGFybV9ldGgubyBuZXRjb25zb2xlLm8gXApkaWZmIC0tZ2l0IGEvYm9hcmQvbHBjMjI5MnNvZGltbS9ldGguYyBiL2RyaXZlcnMvZW5jMjhqNjAuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIGJvYXJkL2xwYzIyOTJzb2RpbW0vZXRoLmMKcmVuYW1lIHRvIGRyaXZlcnMvZW5jMjhqNjAuYwppbmRleCAyNDlhYjA0Li45ODMwM2FjCi0tLSBhL2JvYXJkL2xwYzIyOTJzb2RpbW0vZXRoLmMKKysrIGIvZHJpdmVycy9lbmMyOGo2MC5jCkBAIC0xNyw5ICsxNywxMCBAQAogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8Y29tbW9uLmg+CisjaWZkZWYgQ09ORklHX0VOQzI4SjYwCiAjaW5jbHVkZSA8bmV0Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlICJzcGkuaCIKKyNpbmNsdWRlIDxhc20vYXJjaC9zcGkuaD4KIAogLyoKICAqIENvbnRyb2wgUmVnaXN0ZXJzIGluIEJhbmsgMApAQCAtMzYsNyArMzcsNyBAQAogI2RlZmluZSBDVExfUkVHX0VSWFNUTAkgMHgwOAogI2RlZmluZSBDVExfUkVHX0VSWFNUSAkgMHgwOQogI2RlZmluZSBDVExfUkVHX0VSWE5ETAkgMHgwQQotI2RlZmluZSBDVExfUkVHX0VSWE5EQQkgMHgwQgorI2RlZmluZSBDVExfUkVHX0VSWE5ESAkgMHgwQgogI2RlZmluZSBDVExfUkVHX0VSWFJEUFRMIDB4MEMKICNkZWZpbmUgQ1RMX1JFR19FUlhSRFBUSCAweDBECiAjZGVmaW5lIENUTF9SRUdfRVJYV1JQVEwgMHgwRQpAQCAtMTM3LDcgKzEzOCwxMCBAQAogCiAjZGVmaW5lIFBIWV9SRUdfUEhJRDEgMHgwMgogI2RlZmluZSBQSFlfUkVHX1BISUQyIDB4MDMKLQorLyogdGFrZW4gZnJvbSB0aGUgTGludXggZHJpdmVyICovCisjZGVmaW5lIFBIWV9SRUdfUEhDT04xIDB4MDAKKyNkZWZpbmUgUEhZX1JFR19QSENPTjIgMHgxMAorI2RlZmluZSBQSFlfUkVHX1BITENPTiAweDE0CiAKIC8qCiAgKiBSZWNlaXZlIEZpbHRlciBSZWdpc3RlciAoRVJYRkNPTikgYml0cwpAQCAtMjc0LDYgKzI3OCw5IEBACiAvKiBVc2UgdGhlIGxvd2VyIG1lbW9yeSBmb3IgcmVjZWl2ZXIgYnVmZmVyLiBTZWUgZXJyYXRhIHB0LiA1ICovCiAjZGVmaW5lIEVOQ19SWF9CVUZfU1RBUlQgMHgwMDAwCiAjZGVmaW5lIEVOQ19UWF9CVUZfU1RBUlQgMHgxODAwCisvKiB0YWtlbiBmcm9tIHRoZSBMaW51eCBkcml2ZXIgKi8KKyNkZWZpbmUgRU5DX1JYX0JVRl9FTkQgICAweDE3ZmYKKyNkZWZpbmUgRU5DX1RYX0JVRl9FTkQgICAweDFmZmYKIAogLyogbWF4aW11bSBmcmFtZSBsZW5ndGggKi8KICNkZWZpbmUgRU5DX01BWF9GUk1fTEVOIDE1MTgKQEAgLTI5Myw2ICszMDAsNyBAQAogc3RhdGljIHZvaWQgZW5jUmVzZXQgKHZvaWQpOwogc3RhdGljIHZvaWQgZW5jSW5pdCAodW5zaWduZWQgY2hhciAqcEV0aEFkZHIpOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHBoeVJlYWQgKHVuc2lnbmVkIGNoYXIgYWRkcik7CitzdGF0aWMgdm9pZCBwaHlXcml0ZSh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBzaG9ydCk7CiBzdGF0aWMgdm9pZCBlbmNQb2xsICh2b2lkKTsKIHN0YXRpYyB2b2lkIGVuY1J4ICh2b2lkKTsKIApAQCAtMzE4LDEwICszMjYsMTIgQEAKICNkZWZpbmUgUlhfUkVTRVRfQ09VTlRFUiAxMDAwOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBSZXR1cm5zIDAgd2hlbiBmYWlsZXMgb3RoZXJ3aXplIDEKKyAqIEFsd2F5cyByZXR1cm5zIDAKICAqLwogaW50IGV0aF9pbml0IChiZF90ICogYmlzKQogeworCXVuc2lnbmVkIGNoYXIgZXN0YXRWYWw7CisKIAkvKiBjb25maWd1cmUgR1BJTyAqLwogCSgqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIElPMURJUikpIHw9IEVOQ19TUElfU0xBVkVfQ1M7CiAJKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgSU8xRElSKSkgfD0gRU5DX1JFU0VUOwpAQCAtMzMyLDYgKzM0MiwxNCBAQAogCiAJc3BpX2luaXQgKCk7CiAKKwkvKiB0YWtlbiBmcm9tIHRoZSBMaW51eCBkcml2ZXIgLSBkYW5nZXJvdXMgc3R1ZmYgaGVyZSEgKi8KKwkvKiBXYWl0IGZvciBDTEtSRFkgdG8gYmVjb21lIHNldCAoaS5lLiwgY2hlY2sgdGhhdCB3ZSBjYW4gY29tbXVuaWNhdGUgd2l0aAorCSAgIHRoZSBFTkMpICovCisJZG8KKwl7CisJCWVzdGF0VmFsID0gbV9uaWNfcmVhZChDVExfUkVHX0VTVEFUKTsKKwl9IHdoaWxlICgoZXN0YXRWYWwgJiAweDA4KSB8fCAofmVzdGF0VmFsICYgRU5DX0VTVEFUX0NMS1JEWSkpOworCiAJLyogaW5pdGlhbGl6ZSBjb250cm9sbGVyICovCiAJZW5jUmVzZXQgKCk7CiAJZW5jSW5pdCAoYmlzLT5iaV9lbmV0YWRkcik7CkBAIC0zNTMsNiArMzcxLDEwIEBACiAJbV9uaWNfd3JpdGUgKENUTF9SRUdfRVdSUFRMLCAoRU5DX1RYX0JVRl9TVEFSVCAmIDB4ZmYpKTsKIAltX25pY193cml0ZSAoQ1RMX1JFR19FV1JQVEgsIChFTkNfVFhfQlVGX1NUQVJUID4+IDgpKTsKIAorCS8qIHNldCBFVFhORCAqLworCW1fbmljX3dyaXRlIChDVExfUkVHX0VUWE5ETCwgKGxlbmd0aCArIEVOQ19UWF9CVUZfU1RBUlQpICYgMHhGRik7CisJbV9uaWNfd3JpdGUgKENUTF9SRUdfRVRYTkRILCAobGVuZ3RoICsgRU5DX1RYX0JVRl9TVEFSVCkgPj4gOCk7CisKIAkvKiBzZXQgRVRYU1QgKi8KIAltX25pY193cml0ZSAoQ1RMX1JFR19FVFhTVEwsIEVOQ19UWF9CVUZfU1RBUlQgJiAweEZGKTsKIAltX25pY193cml0ZSAoQ1RMX1JFR19FVFhTVEgsIEVOQ19UWF9CVUZfU1RBUlQgPj4gOCk7CkBAIC0zNjAsOSArMzgyLDE1IEBACiAJLyogd3JpdGUgcGFja2V0ICovCiAJbV9uaWNfd3JpdGVfZGF0YSAobGVuZ3RoLCAodW5zaWduZWQgY2hhciAqKSBwYWNrZXQpOwogCi0JLyogc2V0IEVUWE5EICovCi0JbV9uaWNfd3JpdGUgKENUTF9SRUdfRVRYTkRMLCAobGVuZ3RoICsgRU5DX1RYX0JVRl9TVEFSVCkgJiAweEZGKTsKLQltX25pY193cml0ZSAoQ1RMX1JFR19FVFhOREgsIChsZW5ndGggKyBFTkNfVFhfQlVGX1NUQVJUKSA+PiA4KTsKKwkvKiB0YWtlbiBmcm9tIHRoZSBMaW51eCBkcml2ZXIgKi8KKwkvKiBWZXJpZnkgdGhhdCB0aGUgaW50ZXJuYWwgdHJhbnNtaXQgbG9naWMgaGFzIG5vdCBiZWVuIGFsdGVyZWQgYnkgZXhjZXNzaXZlCisJICAgY29sbGlzaW9ucy4gIFNlZSBFcnJhdGEgQjQgMTIgYW5kIDE0LgorCSAqLworCWlmIChtX25pY19yZWFkKENUTF9SRUdfRUlSKSAmIEVOQ19FSVJfVFhFUklGKSB7CisJCW1fbmljX2JmcyhDVExfUkVHX0VDT04xLCBFTkNfRUNPTjFfVFhSU1QpOworCQltX25pY19iZmMoQ1RMX1JFR19FQ09OMSwgRU5DX0VDT04xX1RYUlNUKTsKKwl9CisJbV9uaWNfYmZjKENUTF9SRUdfRUlSLCAoRU5DX0VJUl9UWEVSSUYgfCBFTkNfRUlSX1RYSUYpKTsKIAogCS8qIHNldCBFQ09OMS5UWFJUUyAqLwogCW1fbmljX2JmcyAoQ1RMX1JFR19FQ09OMSwgRU5DX0VDT04xX1RYUlRTKTsKQEAgLTQyMyw4ICs0NTEsMTAgQEAKIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGVzdGF0X3JlZzsKIAl1bnNpZ25lZCBjaGFyIHBrdF9jbnQ7CiAKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQogCS8qIGNsZWFyIGdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlIGJpdCBpbiBlbmMyOGo2MCAqLwogCW1fbmljX2JmYyAoQ1RMX1JFR19FSUUsIEVOQ19FSUVfSU5USUUpOworI2VuZGlmCiAJZXN0YXRfcmVnID0gbV9uaWNfcmVhZCAoQ1RMX1JFR19FU1RBVCk7CiAKIAllaXJfcmVnID0gbV9uaWNfcmVhZCAoQ1RMX1JFR19FSVIpOwpAQCAtNDYyLDggKzQ5MiwxMCBAQAogCQltX25pY19iZmMgKENUTF9SRUdfRUlSLCBFTkNfRUlSX1RYRVJJRik7CiAJfQogCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKIAkvKiBzZXQgZ2xvYmFsIGludGVycnVwdCBlbmFibGUgYml0IGluIGVuYzI4ajYwICovCiAJbV9uaWNfYmZzIChDVExfUkVHX0VJRSwgRU5DX0VJRV9JTlRJRSk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgZW5jUnggKHZvaWQpCkBAIC00NzMsNiArNTA1LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAJdW5zaWduZWQgY2hhciBlaXJfcmVnOwogCXVuc2lnbmVkIGNoYXIgcGt0X2NudCA9IDA7CisJdW5zaWduZWQgc2hvcnQgcnhidWZfcmRwdDsKIAogCS8qIHN3aXRjaCB0byBiYW5rIDAgKi8KIAltX25pY19iZmMgKENUTF9SRUdfRUNPTjEsIChFTkNfRUNPTjFfQlNFTDEgfCBFTkNfRUNPTjFfQlNFTDApKTsKQEAgLTQ4OSwxOCArNTIyLDE5IEBACiAJCXN0YXR1cyA9IGJ1ZmZlcls0XTsKIAkJc3RhdHVzIHw9ICh1bnNpZ25lZCBzaG9ydCkgYnVmZmVyWzVdIDw8IDg7CiAKLQkJaWYgKHBrdF9sZW4gPD0gRU5DX01BWF9GUk1fTEVOKSB7CisJCWlmIChwa3RfbGVuIDw9IEVOQ19NQVhfRlJNX0xFTikKIAkJCWNvcHlfbGVuID0gcGt0X2xlbjsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJY29weV9sZW4gPSAwOwotCQkJLyogICAgICBwX3ByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsgKi8KLQkJCS8qIHdlIHdpbGwgZHJvcCB0aGlzIHBhY2tldCAqLwotCQl9CiAKLQkJaWYgKChzdGF0dXMgJiAoMUwgPDwgNykpID09IDApIHsJLyogY2hlY2sgUmVjZWl2ZWQgT2sgYml0ICovCisJCWlmICgoc3RhdHVzICYgKDFMIDw8IDcpKSA9PSAwKSAvKiBjaGVjayBSZWNlaXZlZCBPayBiaXQgKi8KIAkJCWNvcHlfbGVuID0gMDsKLQkJCS8qICAgICAgcF9wcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsgKi8KLQkJfQorCisJCS8qIHRha2VuIGZyb20gdGhlIExpbnV4IGRyaXZlciAqLworCQkvKiBjaGVjayBpZiBuZXh0IHBvaW50ZXIgaXMgcmVzb25hYmxlICovCisJCWlmICgoKCh1bnNpZ25lZCBpbnQpbmV4dF9wb2ludGVyX21zYiA8PCA4KSB8CisJCQkodW5zaWduZWQgaW50KW5leHRfcG9pbnRlcl9sc2IpID49IEVOQ19UWF9CVUZfU1RBUlQpCisJCQljb3B5X2xlbiA9IDA7CiAKIAkJaWYgKGNvcHlfbGVuID4gMCkgewogCQkJbV9uaWNfcmVhZF9kYXRhIChjb3B5X2xlbiwgYnVmZmVyKTsKQEAgLTUxMyw2ICs1NDcsMjIgQEAKIAkJLyogZGVjcmVhc2UgcGFja2V0IGNvdW50ZXIgKi8KIAkJbV9uaWNfYmZzIChDVExfUkVHX0VDT04yLCBFTkNfRUNPTjJfUEtUREVDKTsKIAorCQkvKiB0YWtlbiBmcm9tIHRoZSBMaW51eCBkcml2ZXIgKi8KKwkJLyogT25seSBvZGQgdmFsdWVzIHNob3VsZCBiZSB3cml0dGVuIHRvIEVSWFJEUFRMLAorCQkgKiBzZWUgZXJyYXRhIEI0IHB0LjEzCisJCSAqLworCQlyeGJ1Zl9yZHB0ID0gKG5leHRfcG9pbnRlcl9tc2IgPDwgOCB8IG5leHRfcG9pbnRlcl9sc2IpIC0gMTsKKwkJaWYgKChyeGJ1Zl9yZHB0IDwgKG1fbmljX3JlYWQoQ1RMX1JFR19FUlhTVEgpIDw8IDggfAorCQkJCW1fbmljX3JlYWQoQ1RMX1JFR19FUlhTVEwpKSkgfHwgKHJ4YnVmX3JkcHQgPgorCQkJCShtX25pY19yZWFkKENUTF9SRUdfRVJYTkRIKSA8PCA4IHwKKwkJCQltX25pY19yZWFkKENUTF9SRUdfRVJYTkRMKSkpKSB7CisJCQltX25pY193cml0ZShDVExfUkVHX0VSWFJEUFRMLCBtX25pY19yZWFkKENUTF9SRUdfRVJYTkRMKSk7CisJCQltX25pY193cml0ZShDVExfUkVHX0VSWFJEUFRILCBtX25pY19yZWFkKENUTF9SRUdfRVJYTkRIKSk7CisJCX0gZWxzZSB7CisJCQltX25pY193cml0ZShDVExfUkVHX0VSWFJEUFRMLCByeGJ1Zl9yZHB0ICYgMHhGRik7CisJCQltX25pY193cml0ZShDVExfUkVHX0VSWFJEUFRILCByeGJ1Zl9yZHB0ID4+IDgpOworCQl9CisKIAkJLyogbW92ZSB0byBiYW5rIDEgKi8KIAkJbV9uaWNfYmZjIChDVExfUkVHX0VDT04xLCBFTkNfRUNPTjFfQlNFTDEpOwogCQltX25pY19iZnMgKENUTF9SRUdfRUNPTjEsIEVOQ19FQ09OMV9CU0VMMCk7CkBAIC01MzUsOCArNTg1LDYgQEAKIAogCQllaXJfcmVnID0gbV9uaWNfcmVhZCAoQ1RMX1JFR19FSVIpOwogCX0gd2hpbGUgKHBrdF9jbnQpOwkvKiBVc2UgRVBLVENOVCBub3QgRUlSLlBLVElGIGZsYWcsIHNlZSBlcnJhdGEgcHQuIDYgKi8KLQltX25pY193cml0ZSAoQ1RMX1JFR19FUlhSRFBUTCwgbmV4dF9wb2ludGVyX2xzYik7Ci0JbV9uaWNfd3JpdGUgKENUTF9SRUdfRVJYUkRQVEgsIG5leHRfcG9pbnRlcl9tc2IpOwogfQogCiBzdGF0aWMgdm9pZCBlbmNXcml0ZVJlZyAodW5zaWduZWQgY2hhciByZWdObywgdW5zaWduZWQgY2hhciBkYXRhKQpAQCAtNzAwLDEyICs3NDgsNiBAQAogCiAJLyogc2xlZXAgMSBtcy4gU2VlIGVycmF0YSBwdC4gMiAqLwogCXVkZWxheSAoMTAwMCk7Ci0KLSNpZiAwCi0JKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgSU8xQ0xSKSkgJj0gRU5DX1JFU0VUOwotCW1kZWxheSAoNSk7Ci0JKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgSU8xU0VUKSkgJj0gRU5DX1JFU0VUOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGVuY0luaXQgKHVuc2lnbmVkIGNoYXIgKnBFdGhBZGRyKQpAQCAtNzIwLDQ0ICs3NjIsMjEgQEAKIAkgKiBTZXR1cCB0aGUgYnVmZmVyIHNwYWNlLiBUaGUgcmVzZXQgdmFsdWVzIGFyZSB2YWxpZCBmb3IgdGhlCiAJICogb3RoZXIgcG9pbnRlcnMuCiAJICovCi0jaWYgMAogCS8qIFdlIHNoYWxsIG5vdCB3cml0ZSB0byBFUlhTVCwgc2VlIGVycmF0YSBwdC4gNS4gSW5zdGVhZCB3ZQogCSAgIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgRU5DX1JYX0JVU19TVEFSVCBpcyAwLiAqLwogCW1fbmljX3dyaXRlX3JldHJ5IChDVExfUkVHX0VSWFNUTCwgKEVOQ19SWF9CVUZfU1RBUlQgJiAweEZGKSwgMSk7CiAJbV9uaWNfd3JpdGVfcmV0cnkgKENUTF9SRUdfRVJYU1RILCAoRU5DX1JYX0JVRl9TVEFSVCA+PiA4KSwgMSk7Ci0jZW5kaWYKKworCS8qIHRha2VuIGZyb20gdGhlIExpbnV4IGRyaXZlciAqLworCW1fbmljX3dyaXRlX3JldHJ5IChDVExfUkVHX0VSWE5ETCwgKEVOQ19SWF9CVUZfRU5EICYgMHhGRiksIDEpOworCW1fbmljX3dyaXRlX3JldHJ5IChDVExfUkVHX0VSWE5ESCwgKEVOQ19SWF9CVUZfRU5EID4+IDgpLCAxKTsKKwogCW1fbmljX3dyaXRlX3JldHJ5IChDVExfUkVHX0VSRFBUTCwgKEVOQ19SWF9CVUZfU1RBUlQgJiAweEZGKSwgMSk7CiAJbV9uaWNfd3JpdGVfcmV0cnkgKENUTF9SRUdfRVJEUFRILCAoRU5DX1JYX0JVRl9TVEFSVCA+PiA4KSwgMSk7CiAKIAluZXh0X3BvaW50ZXJfbHNiID0gKEVOQ19SWF9CVUZfU1RBUlQgJiAweEZGKTsKIAluZXh0X3BvaW50ZXJfbXNiID0gKEVOQ19SWF9CVUZfU1RBUlQgPj4gOCk7CiAKLQkvKgotCSAqIEZvciB0cmFja2luZyBwdXJwb3NlcywgdGhlIEVSWFJEUFQgcmVnaXN0ZXJzIHNob3VsZCBiZSBwcm9ncmFtbWVkIHdpdGgKLQkgKiB0aGUgc2FtZSB2YWx1ZS4gVGhpcyBpcyB0aGUgcmVhZCBwb2ludGVyLgotCSAqLwotCW1fbmljX3dyaXRlIChDVExfUkVHX0VSWFJEUFRMLCAoRU5DX1JYX0JVRl9TVEFSVCAmIDB4RkYpKTsKLQltX25pY193cml0ZV9yZXRyeSAoQ1RMX1JFR19FUlhSRFBUSCwgKEVOQ19SWF9CVUZfU1RBUlQgPj4gOCksIDEpOwotCi0JLyogU2V0dXAgcmVjZWl2ZSBmaWx0ZXJzLiAqLwotCi0JLyogbW92ZSB0byBiYW5rIDEgKi8KLQltX25pY19iZmMgKENUTF9SRUdfRUNPTjEsIEVOQ19FQ09OMV9CU0VMMSk7Ci0JbV9uaWNfYmZzIChDVExfUkVHX0VDT04xLCBFTkNfRUNPTjFfQlNFTDApOwotCi0JLyogT1ItZmlsdGVyaW5nLCBVbmljYXN0LCBDUkMtY2hlY2sgYW5kIGJyb2FkY2FzdCAqLwotCW1fbmljX3dyaXRlX3JldHJ5IChDVExfUkVHX0VSWEZDT04sCi0JCQkgICAoRU5DX1JGUl9VQ0VOIHwgRU5DX1JGUl9DUkNFTiB8IEVOQ19SRlJfQkNFTiksIDEpOwotCi0JLyogV2FpdCBmb3IgT3NjaWxsYXRvciBTdGFydC11cCBUaW1lciAoT1NUKS4gKi8KLQl3aGlsZSAoKG1fbmljX3JlYWQgKENUTF9SRUdfRVNUQVQpICYgRU5DX0VTVEFUX0NMS1JEWSkgPT0gMCkgewotCQlzdGF0aWMgaW50IGNudCA9IDA7Ci0KLQkJaWYgKGNudCsrID49IDEwMDApIHsKLQkJCWNudCA9IDA7Ci0JCX0KLQl9Ci0KIAkvKiB2ZXJpZnkgaWRlbnRpZmljYXRpb24gKi8KIAlwaGlkMSA9IHBoeVJlYWQgKFBIWV9SRUdfUEhJRDEpOwogCXBoaWQyID0gcGh5UmVhZCAoUEhZX1JFR19QSElEMik7CkBAIC03ODAsMTYgKzc5OSwzNCBAQAogCS8qIHN3aXRjaCB0byBiYW5rIDIgKi8KIAltX25pY19iZmMgKENUTF9SRUdfRUNPTjEsIEVOQ19FQ09OMV9CU0VMMCk7CiAJbV9uaWNfYmZzIChDVExfUkVHX0VDT04xLCBFTkNfRUNPTjFfQlNFTDEpOwotCS8qIGNsZWFyIE1BQyByZXNldCBiaXRzICovCi0JbV9uaWNfd3JpdGVfcmV0cnkgKENUTF9SRUdfTUFDT04yLCAwLCAxKTsKIAogCS8qIGVuYWJsZSBNQUMgdG8gcmVjZWl2ZSBmcmFtZXMgKi8KLQltX25pY193cml0ZV9yZXRyeSAoQ1RMX1JFR19NQUNPTjEsIEVOQ19NQUNPTjFfTUFSWEVOLCAxMCk7CisJLyogYWRkZWQgc29tZSBiaXRzIGZyb20gdGhlIExpbnV4IGRyaXZlciAqLworCW1fbmljX3dyaXRlX3JldHJ5IChDVExfUkVHX01BQ09OMQorCQksKEVOQ19NQUNPTjFfTUFSWEVOIHwgRU5DX01BQ09OMV9UWFBBVVMgfCBFTkNfTUFDT04xX1JYUEFVUykKKwkJLDEwKTsKIAogCS8qIGNvbmZpZ3VyZSBwYWQsIHR4LWNyYyBhbmQgZHVwbGV4ICovCi0JLyogVE9ETyBtYXliZSBlbmFibGUgRlJNTE5FTiAqLwotCW1fbmljX3dyaXRlX3JldHJ5IChDVExfUkVHX01BQ09OMywKLQkJCSAgIChFTkNfTUFDT04zX1BBRENGRzAgfCBFTkNfTUFDT04zX1RYQ1JDRU4pLCAxMCk7CisJLyogYWRkZWQgYSBiaXQgZnJvbSB0aGUgTGludXggZHJpdmVyICovCisJbV9uaWNfd3JpdGVfcmV0cnkgKENUTF9SRUdfTUFDT04zCisJCSwoRU5DX01BQ09OM19QQURDRkcwIHwgRU5DX01BQ09OM19UWENSQ0VOIHwgRU5DX01BQ09OM19GUk1MTkVOKQorCQksMTApOworCisJLyogYWRkZWQgNCBuZXcgbGluZXMgZnJvbSB0aGUgTGludXggZHJpdmVyICovCisJLyogQWxsb3cgaW5maW5pdGUgZGVmZXJhbHMgaWYgdGhlIG1lZGl1bSBpcyBjb250aW5vdXNseSBidXN5ICovCisJbV9uaWNfd3JpdGVfcmV0cnkoQ1RMX1JFR19NQUNPTjQsICgxPDw2KSAvKkVOQ19NQUNPTjRfREVGRVIqLywgMTApOworCisJLyogTGF0ZSBjb2xsaXNpb25zIG9jY3VyIGJleW9uZCA2MyBieXRlcyAqLworCW1fbmljX3dyaXRlX3JldHJ5KENUTF9SRUdfTUFDTENPTjIsIDYzLCAxMCk7CisKKwkvKiBTZXQgKGxvdyBieXRlKSBOb24tQmFjay10b19CYWNrIEludGVyLVBhY2tldCBHYXAuIFJlY29tbWVuZGVkIDB4MTIgKi8KKwltX25pY193cml0ZV9yZXRyeShDVExfUkVHX01BSVBHTCwgMHgxMiwgMTApOworCisJLyoKKwkqIFNldCAoaGlnaCBieXRlKSBOb24tQmFjay10b19CYWNrIEludGVyLVBhY2tldCBHYXAuIFJlY29tbWVuZGVkCisJKiAweDBjIGZvciBoYWxmLWR1cGxleC4gTm90aGluZyBmb3IgZnVsbC1kdXBsZXgKKwkqLworCW1fbmljX3dyaXRlX3JldHJ5KENUTF9SRUdfTUFJUEdILCAweDBDLCAxMCk7CiAKIAkvKiBzZXQgbWF4aW11bSBmcmFtZSBsZW5ndGggKi8KIAltX25pY193cml0ZV9yZXRyeSAoQ1RMX1JFR19NQU1YRkxMLCAoRU5DX01BWF9GUk1fTEVOICYgMHhmZiksIDEwKTsKQEAgLTgwMSwxNSArODM4LDYgQEAKIAkgKi8KIAltX25pY193cml0ZV9yZXRyeSAoQ1RMX1JFR19NQUJCSVBHLCAweDEyLCAxMCk7CiAKLQkvKiBTZXQgKGxvdyBieXRlKSBOb24tQmFjay10b19CYWNrIEludGVyLVBhY2tldCBHYXAuIFJlY29tbWVuZGVkIDB4MTIgKi8KLQltX25pY193cml0ZV9yZXRyeSAoQ1RMX1JFR19NQUlQR0wsIDB4MTIsIDEwKTsKLQotCS8qCi0JICogU2V0IChoaWdoIGJ5dGUpIE5vbi1CYWNrLXRvX0JhY2sgSW50ZXItUGFja2V0IEdhcC4gUmVjb21tZW5kZWQKLQkgKiAweDBjIGZvciBoYWxmLWR1cGxleC4gTm90aGluZyBmb3IgZnVsbC1kdXBsZXgKLQkgKi8KLQltX25pY193cml0ZV9yZXRyeSAoQ1RMX1JFR19NQUlQR0gsIDB4MEMsIDEwKTsKLQogCS8qIHNldCBNQUMgYWRkcmVzcyAqLwogCiAJLyogc3dpdGNoIHRvIGJhbmsgMyAqLwpAQCAtODIzLDE4ICs4NTEsMzUgQEAKIAltX25pY193cml0ZV9yZXRyeSAoQ1RMX1JFR19NQUFEUjUsIHBFdGhBZGRyWzBdLCAxKTsKIAogCS8qCi0JICogUmVjZWl2ZSBzZXR0aW5ncworCSogUEhZIEluaXRpYWxpemF0aW9uIHRha2VuIGZyb20gdGhlIExpbnV4IGRyaXZlcgogCSAqLwogCi0JLyogYXV0by1pbmNyZW1lbnQgUlgtcG9pbnRlciB3aGVuIHJlYWRpbmcgYSByZWNlaXZlZCBwYWNrZXQgKi8KLQltX25pY19iZnMgKENUTF9SRUdfRUNPTjIsIEVOQ19FQ09OMl9BVVRPSU5DKTsKKwkvKiBQcmV2ZW50IGF1dG9tYXRpYyBsb29wYmFjayBvZiBkYXRhIGJlZWluZyB0cmFuc21pdHRlZCBieSBzZXR0aW5nCisJICAgRU5DX1BIQ09OMl9IRExESVMgKi8KKwlwaHlXcml0ZShQSFlfUkVHX1BIQ09OMiwgKDE8PDgpKTsKKworCS8qIExFRHMgY29uZmlndXJhdGlvbgorCSAqIExFREE6IExBQ0ZHID0gMDEwMCAtPiBkaXNwbGF5IGxpbmsgc3RhdHVzCisJICogTEVEQjogTEJDRkcgPSAwMTExIC0+IGRpc3BsYXkgVFggJiBSWCBhY3Rpdml0eQorCSAqIFNUUkNIID0gMSAtPiBMRUQgcHVsc2VzCisJICovCisJcGh5V3JpdGUoUEhZX1JFR19QSExDT04sIDB4MDQ3Mik7CiAKKwkvKiBSZXNldCBQRFBYTUQtYml0ID0+IGhhbGYgZHVwbGV4ICovCisJcGh5V3JpdGUoUEhZX1JFR19QSENPTjEsIDApOworCisJLyoKKwkgKiBSZWNlaXZlIHNldHRpbmdzCisJICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQogCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCiAJbV9uaWNfYmZzIChDVExfUkVHX0VJRSwgRU5DX0VJRV9QS1RJRSk7CiAJbV9uaWNfYmZzIChDVExfUkVHX0VJRSwgRU5DX0VJRV9UWElFKTsKIAltX25pY19iZnMgKENUTF9SRUdfRUlFLCBFTkNfRUlFX1JYRVJJRSk7CiAJbV9uaWNfYmZzIChDVExfUkVHX0VJRSwgRU5DX0VJRV9UWEVSSUUpOwogCW1fbmljX2JmcyAoQ1RMX1JFR19FSUUsIEVOQ19FSUVfSU5USUUpOworI2VuZGlmCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtODY0LDYgKzkwOSwxMSBAQAogCS8qIHNldCBNSUNNRC5NSUlSRCAqLwogCW1fbmljX3dyaXRlIChDVExfUkVHX01JQ01ELCBFTkNfTUlDTURfTUlJUkQpOwogCisJLyogdGFrZW4gZnJvbSB0aGUgTGludXggZHJpdmVyICovCisJLyogbW92ZSB0byBiYW5rIDMgKi8KKwltX25pY19iZnMoQ1RMX1JFR19FQ09OMSwgRU5DX0VDT04xX0JTRUwwKTsKKwltX25pY19iZnMoQ1RMX1JFR19FQ09OMSwgRU5DX0VDT04xX0JTRUwxKTsKKwogCS8qIHBvbGwgTUlTVEFULkJVU1kgYml0IHVudGlsIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSAqLwogCXdoaWxlICgobV9uaWNfcmVhZCAoQ1RMX1JFR19NSVNUQVQpICYgRU5DX01JU1RBVF9CVVNZKSAhPSAwKSB7CiAJCXN0YXRpYyBpbnQgY250ID0gMDsKQEAgLTg3NSw2ICs5MjUsMTEgQEAKIAkJfQogCX0KIAorCS8qIHRha2VuIGZyb20gdGhlIExpbnV4IGRyaXZlciAqLworCS8qIG1vdmUgdG8gYmFuayAyICovCisJbV9uaWNfYmZjKENUTF9SRUdfRUNPTjEsIEVOQ19FQ09OMV9CU0VMMCk7CisJbV9uaWNfYmZzKENUTF9SRUdfRUNPTjEsIEVOQ19FQ09OMV9CU0VMMSk7CisKIAkvKiBjbGVhciBNSUNNRC5NSUlSRCAqLwogCW1fbmljX3dyaXRlIChDVExfUkVHX01JQ01ELCAwKTsKIApAQCAtODgzLDMgKzkzOCw0NiBAQAogCiAJcmV0dXJuIHJldDsKIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGFrZW4gZnJvbSB0aGUgTGludXggZHJpdmVyLgorICogRGVzY3JpcHRpb246CisgKiBXcml0ZSBQSFkgcmVnaXN0ZXJzLgorICoKKyAqIE5PVEUhIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGFuZ2UgdG8gQmFuayAzLgorICoKKyAqIFBhcmFtczoKKyAqIFtpbl0gYWRkciBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byB3cml0ZSB0bworICogW2luXSBkYXRhIHRvIGJlIHdyaXR0ZW4KKyAqCisgKiBSZXR1cm5zOgorICogICAgTm9uZQorICovCitzdGF0aWMgdm9pZCBwaHlXcml0ZSh1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIHNob3J0IGRhdGEpCit7CisJLyogbW92ZSB0byBiYW5rIDIgKi8KKwltX25pY19iZmMoQ1RMX1JFR19FQ09OMSwgRU5DX0VDT04xX0JTRUwwKTsKKwltX25pY19iZnMoQ1RMX1JFR19FQ09OMSwgRU5DX0VDT04xX0JTRUwxKTsKKworCS8qIHdyaXRlIGFkZHJlc3MgdG8gTUlSRUdBRFIgKi8KKwltX25pY193cml0ZShDVExfUkVHX01JUkVHQURSLCBhZGRyKTsKKworCW1fbmljX3dyaXRlKENUTF9SRUdfTUlXUkwsIGRhdGEgJiAweGZmKTsKKwltX25pY193cml0ZShDVExfUkVHX01JV1JILCBkYXRhID4+IDgpOworCisJLyogbW92ZSB0byBiYW5rIDMgKi8KKwltX25pY19iZnMoQ1RMX1JFR19FQ09OMSwgRU5DX0VDT04xX0JTRUwwKTsKKwltX25pY19iZnMoQ1RMX1JFR19FQ09OMSwgRU5DX0VDT04xX0JTRUwxKTsKKworCS8qIHBvbGwgTUlTVEFULkJVU1kgYml0IHVudGlsIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSAqLworCXdoaWxlKChtX25pY19yZWFkKENUTF9SRUdfTUlTVEFUKSAmIEVOQ19NSVNUQVRfQlVTWSkgIT0gMCkgeworCQlzdGF0aWMgaW50IGNudCA9IDA7CisKKwkJaWYoY250KysgPj0gMTAwMCkgeworCQkJY250ID0gMDsKKwkJfQorCX0KK30KKworI2VuZGlmIC8qIENPTkZJR19FTkMyOEo2MCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9uYW5kL25hbmRfYmFzZS5jCmluZGV4IDg0OTU4MjkuLmM2ZmVlMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL25hbmQvbmFuZF9iYXNlLmMKQEAgLTQyNyw4ICs0MjcsOSBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJdTE2IGJhZDsKIAorCXBhZ2UgPSAoaW50KShvZnMgPj4gdGhpcy0+cGFnZV9zaGlmdCkgJiB0aGlzLT5wYWdlbWFzazsKKwogCWlmIChnZXRjaGlwKSB7Ci0JCXBhZ2UgPSAoaW50KShvZnMgPj4gdGhpcy0+cGFnZV9zaGlmdCk7CiAJCWNoaXBuciA9IChpbnQpKG9mcyA+PiB0aGlzLT5jaGlwX3NoaWZ0KTsKIAogCQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KQEAgLTQzNiwxOCArNDM3LDE3IEBACiAKIAkJLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwogCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7Ci0JfSBlbHNlCi0JCXBhZ2UgPSAoaW50KSBvZnM7CisJfQogCiAJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSB7Ci0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgdGhpcy0+YmFkYmxvY2twb3MgJiAweEZFLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOworCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURPT0IsIHRoaXMtPmJhZGJsb2NrcG9zICYgMHhGRSwgcGFnZSk7CiAJCWJhZCA9IGNwdV90b19sZTE2KHRoaXMtPnJlYWRfd29yZChtdGQpKTsKIAkJaWYgKHRoaXMtPmJhZGJsb2NrcG9zICYgMHgxKQogCQkJYmFkID4+PSAxOwogCQlpZiAoKGJhZCAmIDB4RkYpICE9IDB4ZmYpCiAJCQlyZXMgPSAxOwogCX0gZWxzZSB7Ci0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgdGhpcy0+YmFkYmxvY2twb3MsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7CisJCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgdGhpcy0+YmFkYmxvY2twb3MsIHBhZ2UpOwogCQlpZiAodGhpcy0+cmVhZF9ieXRlKG10ZCkgIT0gMHhmZikKIAkJCXJlcyA9IDE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uYW5kL25hbmRfZWNjLmMgYi9kcml2ZXJzL25hbmQvbmFuZF9lY2MuYwppbmRleCBmMzNiZTk2Li45MDI3NGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25hbmQvbmFuZF9lY2MuYworKysgYi9kcml2ZXJzL25hbmQvbmFuZF9lY2MuYwpAQCAtNDAsNiArNDAsMTMgQEAKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKSAmJiAhZGVmaW5lZChDRkdfTkFORF9MRUdBQ1kpCiAKICNpbmNsdWRlPGxpbnV4L210ZC9tdGQuaD4KKworLyoKKyAqIE5BTkQtU1BMIGhhcyBubyBzb2Z3YXJlIEVDQyBmb3Igbm93LCBzbyBkb24ndCBpbmNsdWRlIG5hbmRfY2FsY3VsYXRlX2VjYygpLAorICogb25seSBuYW5kX2NvcnJlY3RfZGF0YSgpIGlzIG5lZWRlZAorICovCisKKyNpZm5kZWYgQ09ORklHX05BTkRfU1BMCiAvKgogICogUHJlLWNhbGN1bGF0ZWQgMjU2LXdheSAxIGJ5dGUgY29sdW1uIHBhcml0eQogICovCkBAIC02Miw5MCArNjksNzUgQEAKIAkweDAwLCAweDU1LCAweDU2LCAweDAzLCAweDU5LCAweDBjLCAweDBmLCAweDVhLCAweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwCiB9OwogCi0KLS8qKgotICogbmFuZF90cmFuc19yZXN1bHQgLSBbR0VORVJJQ10gY3JlYXRlIG5vbi1pbnZlcnRlZCBFQ0MKLSAqIEByZWcyOglsaW5lIHBhcml0eSByZWcgMgotICogQHJlZzM6CWxpbmUgcGFyaXR5IHJlZyAzCi0gKiBAZWNjX2NvZGU6CWVjYwotICoKLSAqIENyZWF0ZXMgbm9uLWludmVydGVkIEVDQyBjb2RlIGZyb20gbGluZSBwYXJpdHkKLSAqLwotc3RhdGljIHZvaWQgbmFuZF90cmFuc19yZXN1bHQodV9jaGFyIHJlZzIsIHVfY2hhciByZWczLAotCXVfY2hhciAqZWNjX2NvZGUpCi17Ci0JdV9jaGFyIGEsIGIsIGksIHRtcDEsIHRtcDI7Ci0KLQkvKiBJbml0aWFsaXplIHZhcmlhYmxlcyAqLwotCWEgPSBiID0gMHg4MDsKLQl0bXAxID0gdG1wMiA9IDA7Ci0KLQkvKiBDYWxjdWxhdGUgZmlyc3QgRUNDIGJ5dGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWlmIChyZWczICYgYSkJCS8qIExQMTUsMTMsMTEsOSAtLT4gZWNjX2NvZGVbMF0gKi8KLQkJCXRtcDEgfD0gYjsKLQkJYiA+Pj0gMTsKLQkJaWYgKHJlZzIgJiBhKQkJLyogTFAxNCwxMiwxMCw4IC0tPiBlY2NfY29kZVswXSAqLwotCQkJdG1wMSB8PSBiOwotCQliID4+PSAxOwotCQlhID4+PSAxOwotCX0KLQotCS8qIENhbGN1bGF0ZSBzZWNvbmQgRUNDIGJ5dGUgKi8KLQliID0gMHg4MDsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWlmIChyZWczICYgYSkJCS8qIExQNyw1LDMsMSAtLT4gZWNjX2NvZGVbMV0gKi8KLQkJCXRtcDIgfD0gYjsKLQkJYiA+Pj0gMTsKLQkJaWYgKHJlZzIgJiBhKQkJLyogTFA2LDQsMiwwIC0tPiBlY2NfY29kZVsxXSAqLwotCQkJdG1wMiB8PSBiOwotCQliID4+PSAxOwotCQlhID4+PSAxOwotCX0KLQotCS8qIFN0b3JlIHR3byBvZiB0aGUgRUNDIGJ5dGVzICovCi0JZWNjX2NvZGVbMF0gPSB0bXAxOwotCWVjY19jb2RlWzFdID0gdG1wMjsKLX0KLQogLyoqCi0gKiBuYW5kX2NhbGN1bGF0ZV9lY2MgLSBbTkFORCBJbnRlcmZhY2VdIENhbGN1bGF0ZSAzIGJ5dGUgRUNDIGNvZGUgZm9yIDI1NiBieXRlIGJsb2NrCisgKiBuYW5kX2NhbGN1bGF0ZV9lY2MgLSBbTkFORCBJbnRlcmZhY2VdIENhbGN1bGF0ZSAzLWJ5dGUgRUNDIGZvciAyNTYtYnl0ZSBibG9jawogICogQG10ZDoJTVREIGJsb2NrIHN0cnVjdHVyZQogICogQGRhdDoJcmF3IGRhdGEKICAqIEBlY2NfY29kZToJYnVmZmVyIGZvciBFQ0MKICAqLwotaW50IG5hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpCitpbnQgbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwKKwkJICAgICAgIHVfY2hhciAqZWNjX2NvZGUpCiB7Ci0JdV9jaGFyIGlkeCwgcmVnMSwgcmVnMiwgcmVnMzsKLQlpbnQgajsKKwl1aW50OF90IGlkeCwgcmVnMSwgcmVnMiwgcmVnMywgdG1wMSwgdG1wMjsKKwlpbnQgaTsKIAogCS8qIEluaXRpYWxpemUgdmFyaWFibGVzICovCiAJcmVnMSA9IHJlZzIgPSByZWczID0gMDsKLQllY2NfY29kZVswXSA9IGVjY19jb2RlWzFdID0gZWNjX2NvZGVbMl0gPSAwOwogCiAJLyogQnVpbGQgdXAgY29sdW1uIHBhcml0eSAqLwotCWZvcihqID0gMDsgaiA8IDI1NjsgaisrKSB7Ci0KKwlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykgewogCQkvKiBHZXQgQ1AwIC0gQ1A1IGZyb20gdGFibGUgKi8KLQkJaWR4ID0gbmFuZF9lY2NfcHJlY2FsY190YWJsZVtkYXRbal1dOworCQlpZHggPSBuYW5kX2VjY19wcmVjYWxjX3RhYmxlWypkYXQrK107CiAJCXJlZzEgXj0gKGlkeCAmIDB4M2YpOwogCiAJCS8qIEFsbCBiaXQgWE9SID0gMSA/ICovCiAJCWlmIChpZHggJiAweDQwKSB7Ci0JCQlyZWczIF49ICh1X2NoYXIpIGo7Ci0JCQlyZWcyIF49IH4oKHVfY2hhcikgaik7CisJCQlyZWczIF49ICh1aW50OF90KSBpOworCQkJcmVnMiBePSB+KCh1aW50OF90KSBpKTsKIAkJfQogCX0KIAogCS8qIENyZWF0ZSBub24taW52ZXJ0ZWQgRUNDIGNvZGUgZnJvbSBsaW5lIHBhcml0eSAqLwotCW5hbmRfdHJhbnNfcmVzdWx0KHJlZzIsIHJlZzMsIGVjY19jb2RlKTsKKwl0bXAxICA9IChyZWczICYgMHg4MCkgPj4gMDsgLyogQjcgLT4gQjcgKi8KKwl0bXAxIHw9IChyZWcyICYgMHg4MCkgPj4gMTsgLyogQjcgLT4gQjYgKi8KKwl0bXAxIHw9IChyZWczICYgMHg0MCkgPj4gMTsgLyogQjYgLT4gQjUgKi8KKwl0bXAxIHw9IChyZWcyICYgMHg0MCkgPj4gMjsgLyogQjYgLT4gQjQgKi8KKwl0bXAxIHw9IChyZWczICYgMHgyMCkgPj4gMjsgLyogQjUgLT4gQjMgKi8KKwl0bXAxIHw9IChyZWcyICYgMHgyMCkgPj4gMzsgLyogQjUgLT4gQjIgKi8KKwl0bXAxIHw9IChyZWczICYgMHgxMCkgPj4gMzsgLyogQjQgLT4gQjEgKi8KKwl0bXAxIHw9IChyZWcyICYgMHgxMCkgPj4gNDsgLyogQjQgLT4gQjAgKi8KKworCXRtcDIgID0gKHJlZzMgJiAweDA4KSA8PCA0OyAvKiBCMyAtPiBCNyAqLworCXRtcDIgfD0gKHJlZzIgJiAweDA4KSA8PCAzOyAvKiBCMyAtPiBCNiAqLworCXRtcDIgfD0gKHJlZzMgJiAweDA0KSA8PCAzOyAvKiBCMiAtPiBCNSAqLworCXRtcDIgfD0gKHJlZzIgJiAweDA0KSA8PCAyOyAvKiBCMiAtPiBCNCAqLworCXRtcDIgfD0gKHJlZzMgJiAweDAyKSA8PCAyOyAvKiBCMSAtPiBCMyAqLworCXRtcDIgfD0gKHJlZzIgJiAweDAyKSA8PCAxOyAvKiBCMSAtPiBCMiAqLworCXRtcDIgfD0gKHJlZzMgJiAweDAxKSA8PCAxOyAvKiBCMCAtPiBCMSAqLworCXRtcDIgfD0gKHJlZzIgJiAweDAxKSA8PCAwOyAvKiBCNyAtPiBCMCAqLwogCiAJLyogQ2FsY3VsYXRlIGZpbmFsIEVDQyBjb2RlICovCi0JZWNjX2NvZGVbMF0gPSB+ZWNjX2NvZGVbMF07Ci0JZWNjX2NvZGVbMV0gPSB+ZWNjX2NvZGVbMV07CisjaWZkZWYgQ09ORklHX01URF9OQU5EX0VDQ19TTUMKKwllY2NfY29kZVswXSA9IH50bXAyOworCWVjY19jb2RlWzFdID0gfnRtcDE7CisjZWxzZQorCWVjY19jb2RlWzBdID0gfnRtcDE7CisJZWNjX2NvZGVbMV0gPSB+dG1wMjsKKyNlbmRpZgogCWVjY19jb2RlWzJdID0gKCh+cmVnMSkgPDwgMikgfCAweDAzOworCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogQ09ORklHX05BTkRfU1BMICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGNvdW50Yml0cyh1aW50MzJfdCBieXRlKQoreworCWludCByZXMgPSAwOworCisJZm9yICg7Ynl0ZTsgYnl0ZSA+Pj0gMSkKKwkJcmVzICs9IGJ5dGUgJiAweDAxOworCXJldHVybiByZXM7Cit9CiAKIC8qKgogICogbmFuZF9jb3JyZWN0X2RhdGEgLSBbTkFORCBJbnRlcmZhY2VdIERldGVjdCBhbmQgY29ycmVjdCBiaXQgZXJyb3IocykKQEAgLTE1Niw4OCArMTQ4LDUyIEBACiAgKgogICogRGV0ZWN0IGFuZCBjb3JyZWN0IGEgMSBiaXQgZXJyb3IgZm9yIDI1NiBieXRlIGJsb2NrCiAgKi8KLWludCBuYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpCitpbnQgbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LAorCQkgICAgICB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQogewotCXVfY2hhciBhLCBiLCBjLCBkMSwgZDIsIGQzLCBhZGQsIGJpdCwgaTsKKwl1aW50OF90IHMwLCBzMSwgczI7CiAKLQkvKiBEbyBlcnJvciBkZXRlY3Rpb24gKi8KLQlkMSA9IGNhbGNfZWNjWzBdIF4gcmVhZF9lY2NbMF07Ci0JZDIgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFdOwotCWQzID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKLQotCWlmICgoZDEgfCBkMiB8IGQzKSA9PSAwKSB7Ci0JCS8qIE5vIGVycm9ycyAqLworI2lmZGVmIENPTkZJR19NVERfTkFORF9FQ0NfU01DCisJczAgPSBjYWxjX2VjY1swXSBeIHJlYWRfZWNjWzBdOworCXMxID0gY2FsY19lY2NbMV0gXiByZWFkX2VjY1sxXTsKKwlzMiA9IGNhbGNfZWNjWzJdIF4gcmVhZF9lY2NbMl07CisjZWxzZQorCXMxID0gY2FsY19lY2NbMF0gXiByZWFkX2VjY1swXTsKKwlzMCA9IGNhbGNfZWNjWzFdIF4gcmVhZF9lY2NbMV07CisJczIgPSBjYWxjX2VjY1syXSBeIHJlYWRfZWNjWzJdOworI2VuZGlmCisJaWYgKChzMCB8IHMxIHwgczIpID09IDApCiAJCXJldHVybiAwOwotCX0KLQllbHNlIHsKLQkJYSA9IChkMSBeIChkMSA+PiAxKSkgJiAweDU1OwotCQliID0gKGQyIF4gKGQyID4+IDEpKSAmIDB4NTU7Ci0JCWMgPSAoZDMgXiAoZDMgPj4gMSkpICYgMHg1NDsKIAotCQkvKiBGb3VuZCBhbmQgd2lsbCBjb3JyZWN0IHNpbmdsZSBiaXQgZXJyb3IgaW4gdGhlIGRhdGEgKi8KLQkJaWYgKChhID09IDB4NTUpICYmIChiID09IDB4NTUpICYmIChjID09IDB4NTQpKSB7Ci0JCQljID0gMHg4MDsKLQkJCWFkZCA9IDA7Ci0JCQlhID0gMHg4MDsKLQkJCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQkJCWlmIChkMSAmIGMpCi0JCQkJCWFkZCB8PSBhOwotCQkJCWMgPj49IDI7Ci0JCQkJYSA+Pj0gMTsKLQkJCX0KLQkJCWMgPSAweDgwOwotCQkJZm9yIChpPTA7IGk8NDsgaSsrKSB7Ci0JCQkJaWYgKGQyICYgYykKLQkJCQkJYWRkIHw9IGE7Ci0JCQkJYyA+Pj0gMjsKLQkJCQlhID4+PSAxOwotCQkJfQotCQkJYml0ID0gMDsKLQkJCWIgPSAweDA0OwotCQkJYyA9IDB4ODA7Ci0JCQlmb3IgKGk9MDsgaTwzOyBpKyspIHsKLQkJCQlpZiAoZDMgJiBjKQotCQkJCQliaXQgfD0gYjsKLQkJCQljID4+PSAyOwotCQkJCWIgPj49IDE7Ci0JCQl9Ci0JCQliID0gMHgwMTsKLQkJCWEgPSBkYXRbYWRkXTsKLQkJCWEgXj0gKGIgPDwgYml0KTsKLQkJCWRhdFthZGRdID0gYTsKLQkJCXJldHVybiAxOwotCQl9IGVsc2UgewotCQkJaSA9IDA7Ci0JCQl3aGlsZSAoZDEpIHsKLQkJCQlpZiAoZDEgJiAweDAxKQotCQkJCQkrK2k7Ci0JCQkJZDEgPj49IDE7Ci0JCQl9Ci0JCQl3aGlsZSAoZDIpIHsKLQkJCQlpZiAoZDIgJiAweDAxKQotCQkJCQkrK2k7Ci0JCQkJZDIgPj49IDE7Ci0JCQl9Ci0JCQl3aGlsZSAoZDMpIHsKLQkJCQlpZiAoZDMgJiAweDAxKQotCQkJCQkrK2k7Ci0JCQkJZDMgPj49IDE7Ci0JCQl9Ci0JCQlpZiAoaSA9PSAxKSB7Ci0JCQkJLyogRUNDIENvZGUgRXJyb3IgQ29ycmVjdGlvbiAqLwotCQkJCXJlYWRfZWNjWzBdID0gY2FsY19lY2NbMF07Ci0JCQkJcmVhZF9lY2NbMV0gPSBjYWxjX2VjY1sxXTsKLQkJCQlyZWFkX2VjY1syXSA9IGNhbGNfZWNjWzJdOwotCQkJCXJldHVybiAyOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLyogVW5jb3JyZWN0YWJsZSBFcnJvciAqLwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJfQorCS8qIENoZWNrIGZvciBhIHNpbmdsZSBiaXQgZXJyb3IgKi8KKwlpZiggKChzMCBeIChzMCA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCisJICAgICgoczEgXiAoczEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSAmJgorCSAgICAoKHMyIF4gKHMyID4+IDEpKSAmIDB4NTQpID09IDB4NTQpIHsKKworCQl1aW50MzJfdCBieXRlb2ZmcywgYml0bnVtOworCisJCWJ5dGVvZmZzID0gKHMxIDw8IDApICYgMHg4MDsKKwkJYnl0ZW9mZnMgfD0gKHMxIDw8IDEpICYgMHg0MDsKKwkJYnl0ZW9mZnMgfD0gKHMxIDw8IDIpICYgMHgyMDsKKwkJYnl0ZW9mZnMgfD0gKHMxIDw8IDMpICYgMHgxMDsKKworCQlieXRlb2ZmcyB8PSAoczAgPj4gNCkgJiAweDA4OworCQlieXRlb2ZmcyB8PSAoczAgPj4gMykgJiAweDA0OworCQlieXRlb2ZmcyB8PSAoczAgPj4gMikgJiAweDAyOworCQlieXRlb2ZmcyB8PSAoczAgPj4gMSkgJiAweDAxOworCisJCWJpdG51bSA9IChzMiA+PiA1KSAmIDB4MDQ7CisJCWJpdG51bSB8PSAoczIgPj4gNCkgJiAweDAyOworCQliaXRudW0gfD0gKHMyID4+IDMpICYgMHgwMTsKKworCQlkYXRbYnl0ZW9mZnNdIF49ICgxIDw8IGJpdG51bSk7CisKKwkJcmV0dXJuIDE7CiAJfQogCi0JLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCWlmKGNvdW50Yml0cyhzMCB8ICgodWludDMyX3QpczEgPDwgOCkgfCAoKHVpbnQzMl90KXMyIDw8MTYpKSA9PSAxKQorCQlyZXR1cm4gMTsKKwogCXJldHVybiAtMTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2lfYXV0by5jIGIvZHJpdmVycy9wY2lfYXV0by5jCmluZGV4IDk2OTE2NzUuLmYxNzBjMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpX2F1dG8uYworKysgYi9kcml2ZXJzL3BjaV9hdXRvLmMKQEAgLTM0LDcgKzM0LDEyIEBACiAKIHZvaWQgcGNpYXV0b19yZWdpb25faW5pdChzdHJ1Y3QgcGNpX3JlZ2lvbiogcmVzKQogewotCXJlcy0+YnVzX2xvd2VyID0gcmVzLT5idXNfc3RhcnQ7CisJLyoKKwkgKiBBdm9pZCBhbGxvY2F0aW5nIFBDSSByZXNvdXJjZXMgZnJvbSBhZGRyZXNzIDAgLS0gdGhpcyBpcyBpbGxlZ2FsCisJICogYWNjb3JkaW5nIHRvIFBDSSAyLjEgYW5kIG1vcmVvdmVyLCB0aGlzIGlzIGtub3duIHRvIGNhdXNlIExpbnV4IElERQorCSAqIGRyaXZlcnMgdG8gZmFpbC4gVXNlIGEgcmVhc29uYWJsZSBzdGFydGluZyB2YWx1ZSBvZiAweDEwMDAgaW5zdGVhZC4KKwkgKi8KKwlyZXMtPmJ1c19sb3dlciA9IHJlcy0+YnVzX3N0YXJ0ID8gcmVzLT5idXNfc3RhcnQgOiAweDEwMDA7CiB9CiAKIHZvaWQgcGNpYXV0b19yZWdpb25fYWxpZ24oc3RydWN0IHBjaV9yZWdpb24gKnJlcywgdW5zaWduZWQgbG9uZyBzaXplKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zbWM5MTExMS5jIGIvZHJpdmVycy9zbWM5MTExMS5jCmluZGV4IGY5MWU0YjkuLjgwNjFmMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc21jOTExMTEuYworKysgYi9kcml2ZXJzL3NtYzkxMTExLmMKQEAgLTE1MzgsOSArMTUzOCw5IEBACiBpbnQgc21jX2dldF9ldGhhZGRyIChiZF90ICogYmQpCiB7CiAJaW50IGVudl9zaXplLCByb21fdmFsaWQsIGVudl9wcmVzZW50ID0gMCwgcmVnOwotCWNoYXIgKnMgPSBOVUxMLCAqZSwgKnZfbWFjLCBlc1tdID0gIjExOjIyOjMzOjQ0OjU1OjY2IjsKKwljaGFyICpzID0gTlVMTCwgKmUsIGVzW10gPSAiMTE6MjI6MzM6NDQ6NTU6NjYiOwogCWNoYXIgc19lbnZfbWFjWzY0XTsKLQl1Y2hhciB2X2Vudl9tYWNbNl0sIHZfcm9tX21hY1s2XTsKKwl1Y2hhciB2X2Vudl9tYWNbNl0sIHZfcm9tX21hY1s2XSwgKnZfbWFjOwogCiAJZW52X3NpemUgPSBnZXRlbnZfciAoImV0aGFkZHIiLCBzX2Vudl9tYWMsIHNpemVvZiAoc19lbnZfbWFjKSk7CiAJaWYgKChlbnZfc2l6ZSA+IDApICYmIChlbnZfc2l6ZSA8IHNpemVvZiAoZXMpKSkgewkvKiBleGl0IGlmIGVudiBpcyBiYWQgKi8KQEAgLTE1NjMsNyArMTU2Myw3IEBACiAKIAlpZiAoIWVudl9wcmVzZW50KSB7CS8qIGlmIE5PIGVudiAqLwogCQlpZiAocm9tX3ZhbGlkKSB7CS8qIGJ1dCBST00gaXMgdmFsaWQgKi8KLQkJCXZfbWFjID0gKGNoYXIgKil2X3JvbV9tYWM7CisJCQl2X21hYyA9IHZfcm9tX21hYzsKIAkJCXNwcmludGYgKHNfZW52X21hYywgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIiwKIAkJCQkgdl9tYWNbMF0sIHZfbWFjWzFdLCB2X21hY1syXSwgdl9tYWNbM10sCiAJCQkJIHZfbWFjWzRdLCB2X21hY1s1XSk7CkBAIC0xNTczLDcgKzE1NzMsNyBAQAogCQkJcmV0dXJuICgtMSk7CiAJCX0KIAl9IGVsc2UgewkJLyogZ29vZCBlbnYsIGRvbid0IGNhcmUgUk9NICovCi0JCXZfbWFjID0gKGNoYXIgKil2X2Vudl9tYWM7CS8qIGFsd2F5cyB1c2UgYSBnb29kIGVudiBvdmVyIGEgUk9NICovCisJCXZfbWFjID0gdl9lbnZfbWFjOwkvKiBhbHdheXMgdXNlIGEgZ29vZCBlbnYgb3ZlciBhIFJPTSAqLwogCX0KIAogCWlmIChlbnZfcHJlc2VudCAmJiByb21fdmFsaWQpIHsgLyogaWYgYm90aCBlbnYgYW5kIFJPTSBhcmUgZ29vZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zeXN0ZW1hY2UuYyBiL2RyaXZlcnMvc3lzdGVtYWNlLmMKaW5kZXggMzg0OGQ5Yy4uN2Q4MmMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zeXN0ZW1hY2UuYworKysgYi9kcml2ZXJzL3N5c3RlbWFjZS5jCkBAIC0yMTEsMTAgKzIxMSwxNiBAQAogCQkvKiBXcml0ZSBzZWN0b3IgY291bnQgfCBSZWFkTWVtQ2FyZERhdGEuICovCiAJCWFjZV93cml0ZXcoKHRyYW5zICYgMHhmZikgfCAweDAzMDAsIDB4MTQpOwogCisvKgorICogRm9yIEZQR0EgY29uZmlndXJhdGlvbiB2aWEgU3lzdGVtQUNFIGlzIHJlc2V0IHVuYWNjZXB0YWJsZQorICogQ0ZHRE9ORSBiaXQgaW4gU1RBVFVTUkVHIGlzIG5vdCBzZXQgdG8gMS4KKyAqLworI2lmbmRlZiBTWVNURU1BQ0VfQ09ORklHX0ZQR0EKIAkJLyogUmVzZXQgdGhlIGNvbmZpZ3J1YXRpb24gY29udHJvbGxlciAqLwogCQl2YWwgPSBhY2VfcmVhZHcoMHgxOCk7CiAJCXZhbCB8PSAweDAwODA7CiAJCWFjZV93cml0ZXcodmFsLCAweDE4KTsKKyNlbmRpZgogCiAJCXJldHJ5ID0gdHJhbnMgKiAxNjsKIAkJd2hpbGUgKHJldHJ5ID4gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90c2VjLmMgYi9kcml2ZXJzL3RzZWMuYwppbmRleCAzZjExZWIwLi5iNDE4NzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RzZWMuYworKysgYi9kcml2ZXJzL3RzZWMuYwpAQCAtNSw3ICs1LDcgQEAKICAqIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgaW5jb3Jwb3JhdGVkCiAgKiBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICoKLSAqIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICogQ29weXJpZ2h0IDIwMDQsIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqIChDKSBDb3B5cmlnaHQgMjAwMywgTW90b3JvbGEsIEluYy4KICAqIGF1dGhvciBBbmR5IEZsZW1pbmcKICAqCkBAIC02Niw3ICs2NiwxMSBAQAogICovCiBzdGF0aWMgc3RydWN0IHRzZWNfaW5mb19zdHJ1Y3QgdHNlY19pbmZvW10gPSB7CiAjaWYgZGVmaW5lZChDT05GSUdfTVBDODVYWF9UU0VDMSkgfHwgZGVmaW5lZChDT05GSUdfTVBDODNYWF9UU0VDMSkKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM4NTQ0RFMpCisJe1RTRUMxX1BIWV9BRERSLCBUU0VDX0dJR0FCSVQgfCBUU0VDX1JFRFVDRUQsIFRTRUMxX1BIWUlEWH0sCisjZWxzZQogCXtUU0VDMV9QSFlfQUREUiwgVFNFQ19HSUdBQklULCBUU0VDMV9QSFlJRFh9LAorI2VuZGlmCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4NlhYX1RTRUMxKQogCXtUU0VDMV9QSFlfQUREUiwgVFNFQ19HSUdBQklUIHwgVFNFQ19SRURVQ0VELCBUU0VDMV9QSFlJRFh9LAogI2Vsc2UKQEAgLTM4MSw2ICszODUsNzYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogR2VuZXJpYyBmdW5jdGlvbiB3aGljaCB1cGRhdGVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4LiAgSWYKKyAqIGF1dG9uZWdvdGlhdGlvbiBpcyBlbmFibGVkLCBpdCB1c2VzIHRoZSBBTkQgb2YgdGhlIGxpbmsKKyAqIHBhcnRuZXIncyBhZHZlcnRpc2VkIGNhcGFiaWxpdGllcyBhbmQgb3VyIGFkdmVydGlzZWQKKyAqIGNhcGFiaWxpdGllcy4gIElmIGF1dG9uZWdvdGlhdGlvbiBpcyBkaXNhYmxlZCwgd2UgdXNlIHRoZQorICogYXBwcm9wcmlhdGUgYml0cyBpbiB0aGUgY29udHJvbCByZWdpc3Rlci4KKyAqCisgKiBTdG9sZW4gZnJvbSBMaW51eCdzIG1paS5jIGFuZCBwaHlfZGV2aWNlLmMKKyAqLwordWludCBtaWlfcGFyc2VfbGluayh1aW50IG1paV9yZWcsIHN0cnVjdCB0c2VjX3ByaXZhdGUgKnByaXYpCit7CisJLyogV2UncmUgdXNpbmcgYXV0b25lZ290aWF0aW9uICovCisJaWYgKG1paV9yZWcgJiBQSFlfQk1TUl9BVVROX0FCTEUpIHsKKwkJdWludCBscGEgPSAwOworCQl1aW50IGdibHBhID0gMDsKKworCQkvKiBDaGVjayBmb3IgZ2lnYWJpdCBjYXBhYmlsaXR5ICovCisJCWlmIChtaWlfcmVnICYgUEhZX0JNU1JfRVhUKSB7CisJCQkvKiBXZSB3YW50IGEgbGlzdCBvZiBzdGF0ZXMgc3VwcG9ydGVkIGJ5CisJCQkgKiBib3RoIFBIWXMgaW4gdGhlIGxpbmsKKwkJCSAqLworCQkJZ2JscGEgPSByZWFkX3BoeV9yZWcocHJpdiwgUEhZXzEwMDBCVFNSKTsKKwkJCWdibHBhICY9IHJlYWRfcGh5X3JlZyhwcml2LCBQSFlfMTAwMEJUQ1IpIDw8IDI7CisJCX0KKworCQkvKiBTZXQgdGhlIGJhc2VsaW5lIHNvIHdlIG9ubHkgaGF2ZSB0byBzZXQgdGhlbQorCQkgKiBpZiB0aGV5J3JlIGRpZmZlcmVudAorCQkgKi8KKwkJcHJpdi0+c3BlZWQgPSAxMDsKKwkJcHJpdi0+ZHVwbGV4aXR5ID0gMDsKKworCQkvKiBDaGVjayB0aGUgZ2lnYWJpdCBmaWVsZHMgKi8KKwkJaWYgKGdibHBhICYgKFBIWV8xMDAwQlRTUl8xMDAwRkQgfCBQSFlfMTAwMEJUU1JfMTAwMEhEKSkgeworCQkJcHJpdi0+c3BlZWQgPSAxMDAwOworCisJCQlpZiAoZ2JscGEgJiBQSFlfMTAwMEJUU1JfMTAwMEZEKQorCQkJCXByaXYtPmR1cGxleGl0eSA9IDE7CisKKwkJCS8qIFdlJ3JlIGRvbmUhICovCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWxwYSA9IHJlYWRfcGh5X3JlZyhwcml2LCBQSFlfQU5BUik7CisJCWxwYSAmPSByZWFkX3BoeV9yZWcocHJpdiwgUEhZX0FOTFBBUik7CisKKwkJaWYgKGxwYSAmIChQSFlfQU5MUEFSX1RYRkQgfCBQSFlfQU5MUEFSX1RYKSkgeworCQkJcHJpdi0+c3BlZWQgPSAxMDA7CisKKwkJCWlmIChscGEgJiBQSFlfQU5MUEFSX1RYRkQpCisJCQkJcHJpdi0+ZHVwbGV4aXR5ID0gMTsKKworCQl9IGVsc2UgaWYgKGxwYSAmIFBIWV9BTkxQQVJfMTBGRCkKKwkJCXByaXYtPmR1cGxleGl0eSA9IDE7CisJfSBlbHNlIHsKKwkJdWludCBibWNyID0gcmVhZF9waHlfcmVnKHByaXYsIFBIWV9CTUNSKTsKKworCQlwcml2LT5zcGVlZCA9IDEwOworCQlwcml2LT5kdXBsZXhpdHkgPSAwOworCisJCWlmIChibWNyICYgUEhZX0JNQ1JfRFBMWCkKKwkJCXByaXYtPmR1cGxleGl0eSA9IDE7CisKKwkJaWYgKGJtY3IgJiBQSFlfQk1DUl8xMDAwX01CUFMpCisJCQlwcml2LT5zcGVlZCA9IDEwMDA7CisJCWVsc2UgaWYgKGJtY3IgJiBQSFlfQk1DUl8xMDBfTUJQUykKKwkJCXByaXYtPnNwZWVkID0gMTAwOworCX0KKworCXJldHVybiAwOworfQorCiAvKgogICogUGFyc2UgdGhlIEJDTTU0eHggc3RhdHVzIHJlZ2lzdGVyIGZvciBzcGVlZCBhbmQgZHVwbGV4IGluZm9ybWF0aW9uLgogICogVGhlIGxpbnV4IHN1bmdlbV9waHkgaGFzIHRoaXMgaW5mb3JtYXRpb24sIGJ1dCBpbiBhIHRhYmxlIGZvcm1hdC4KQEAgLTcxOCw2ICs3OTIsNyBAQAogCS8qIFN0YXJ0IHVwIHRoZSBQSFkgKi8KIAlpZihwcml2LT5waHlpbmZvKQogCQlwaHlfcnVuX2NvbW1hbmRzKHByaXYsIHByaXYtPnBoeWluZm8tPnN0YXJ0dXApOworCiAJYWRqdXN0X2xpbmsoZGV2KTsKIAogCS8qIEVuYWJsZSBUcmFuc21pdCBhbmQgUmVjZWl2ZSAqLwpAQCAtMTA4OCw3ICsxMTYzLDI4IEBACiAJCQkgICB7bWlpbV9lbmQsfQogCQkJICAgfSwKIH07CisvKiBhIGdlbmVyaWMgZmxhdm9yLiAgKi8KK3N0cnVjdCBwaHlfaW5mbyBwaHlfaW5mb19nZW5lcmljID0gIHsKKwkwLAorCSJVbmtub3duL0dlbmVyaWMgUEhZIiwKKwkzMiwKKwkoc3RydWN0IHBoeV9jbWRbXSkgeyAvKiBjb25maWcgKi8KKwkJe1BIWV9CTUNSLCBQSFlfQk1DUl9SRVNFVCwgTlVMTH0sCisJCXtQSFlfQk1DUiwgUEhZX0JNQ1JfQVVUT058UEhZX0JNQ1JfUlNUX05FRywgTlVMTH0sCisJCXttaWltX2VuZCx9CisJfSwKKwkoc3RydWN0IHBoeV9jbWRbXSkgeyAvKiBzdGFydHVwICovCisJCXtQSFlfQk1TUiwgbWlpbV9yZWFkLCBOVUxMfSwKKwkJe1BIWV9CTVNSLCBtaWltX3JlYWQsICZtaWlfcGFyc2Vfc3J9LAorCQl7UEhZX0JNU1IsIG1paW1fcmVhZCwgJm1paV9wYXJzZV9saW5rfSwKKwkJe21paW1fZW5kLH0KKwl9LAorCShzdHJ1Y3QgcGh5X2NtZFtdKSB7IC8qIHNodXRkb3duICovCisJCXttaWltX2VuZCx9CisJfQorfTsKIAorCiB1aW50IG1paV9wYXJzZV9seHQ5NzFfc3IyKHVpbnQgbWlpX3JlZywgc3RydWN0IHRzZWNfcHJpdmF0ZSAqcHJpdikKIHsKIAl1bnNpZ25lZCBpbnQgc3BlZWQ7CkBAIC0xMjAzLDYgKzEyOTksNyBAQAogCSZwaHlfaW5mb19seHQ5NzEsCiAJJnBoeV9pbmZvX1ZTQzgyNDQsCiAJJnBoeV9pbmZvX2RwODM4NjUsCisJJnBoeV9pbmZvX2dlbmVyaWMsCiAJTlVMTAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90c2VjLmggYi9kcml2ZXJzL3RzZWMuaAppbmRleCA0MjJiYzY2Li43YmYzZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RzZWMuaAorKysgYi9kcml2ZXJzL3RzZWMuaApAQCAtNyw3ICs3LDcgQEAKICAqICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIsIGluY29ycG9yYXRlZAogICogIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgotICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiBDb3B5cmlnaHQgMjAwNCwgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICogKEMpIENvcHlyaWdodCAyMDAzLCBNb3Rvcm9sYSwgSW5jLgogICogbWFpbnRhaW5lZCBieSBYaWFuZ2h1YSBYaWFvICh4LnhpYW9AbW90b3JvbGEuY29tKQogICogYXV0aG9yIEFuZHkgRmxlbWluZwpAQCAtNjUsNiArNjUsNyBAQAogI2RlZmluZSBFQ05UUkxfSU5JVF9TRVRUSU5HUwkweDAwMDAxMDAwCiAjZGVmaW5lIEVDTlRSTF9UQklfTU9ERSAgICAgICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgRUNOVFJMX1IxMDAJCTB4MDAwMDAwMDgKKyNkZWZpbmUgRUNOVFJMX1NHTUlJX01PREUJMHgwMDAwMDAwMgogCiAjZGVmaW5lIG1paW1fZW5kIC0yCiAjZGVmaW5lIG1paW1fcmVhZCAtMQpkaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdC5jIGIvZnMvZmF0L2ZhdC5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYTgyM2I1YS4uMzAwNzYwOAotLS0gYS9mcy9mYXQvZmF0LmMKKysrIGIvZnMvZmF0L2ZhdC5jCkBAIC01OSw3ICs1OSw4IEBACiAJaWYgKGN1cl9kZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCWlmIChjdXJfZGV2LT5ibG9ja19yZWFkKSB7Ci0JCXJldHVybiBjdXJfZGV2LT5ibG9ja19yZWFkIChjdXJfZGV2LT5kZXYsIHN0YXJ0YmxvY2ssIGdldHNpemUsICh1bnNpZ25lZCBsb25nICopYnVmcHRyKTsKKwkJcmV0dXJuIGN1cl9kZXYtPmJsb2NrX3JlYWQgKGN1cl9kZXYtPmRldgorCQkJLCBzdGFydGJsb2NrLCBnZXRzaXplLCAodW5zaWduZWQgbG9uZyAqKWJ1ZnB0cik7CiAJfQogCXJldHVybiAtMTsKIH0KQEAgLTg5LDggKzkwLDExIEBACiAJCXBhcnRfb2Zmc2V0PTA7CiAJfQogCWVsc2UgewotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lERSkgfHwgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfU0NTSSkgfHwgXAotICAgIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1VTQikgfHwgZGVmaW5lZChDT05GSUdfU1lTVEVNQUNFKQorI2lmICgoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpCXx8IFwKKyAgICAgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfU0NTSSkJfHwgXAorICAgICAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9VU0IpCXx8IFwKKyAgICAgKGRlZmluZWQoQ09ORklHX01NQykgJiYgZGVmaW5lZChDT05GSUdfTFBDMjI5MikpIHx8IFwKKyAgICAgZGVmaW5lZChDT05GSUdfU1lTVEVNQUNFKSAgICAgICAgICApCiAJCWRpc2tfcGFydGl0aW9uX3QgaW5mbzsKIAkJaWYoIWdldF9wYXJ0aXRpb25faW5mbyhkZXZfZGVzYywgcGFydF9ubywgJmluZm8pKSB7CiAJCQlwYXJ0X29mZnNldCA9IGluZm8uc3RhcnQ7CkBAIC05OTMsNyArOTk3LDggQEAKIAltZW1jcHkgKHZvbF9sYWJlbCwgdm9saW5mby52b2x1bWVfbGFiZWwsIDExKTsKIAl2b2xfbGFiZWxbMTFdID0gJ1wwJzsKIAl2b2xpbmZvLmZzX3R5cGVbNV09J1wwJzsKLQlwcmludGYoIlBhcnRpdGlvbiAlZDogRmlsZXN5c3RlbTogJXMgXCIlc1wiXG4iLGN1cl9wYXJ0LHZvbGluZm8uZnNfdHlwZSx2b2xfbGFiZWwpOworCXByaW50ZigiUGFydGl0aW9uICVkOiBGaWxlc3lzdGVtOiAlcyBcIiVzXCJcbiIKKwkJCSxjdXJfcGFydCx2b2xpbmZvLmZzX3R5cGUsdm9sX2xhYmVsKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamZmczIvY29tcHJfemxpYi5jIGIvZnMvamZmczIvY29tcHJfemxpYi5jCmluZGV4IDFiMzU1ODUuLmQ4OGQwZjggMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2NvbXByX3psaWIuYworKysgYi9mcy9qZmZzMi9jb21wcl96bGliLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIGxvbmcgemxpYl9kZWNvbXByZXNzKHVuc2lnbmVkIGNoYXIgKmRhdGFfaW4sIHVuc2lnbmVkIGNoYXIgKmNwYWdlX291dCwKIAkJICAgICAgX191MzIgc3JjbGVuLCBfX3UzMiBkZXN0bGVuKQogewotICAgIHJldHVybiAoZGVjb21wcmVzc19ibG9jayhjcGFnZV9vdXQsIGRhdGFfaW4gKyAyLCBsZHJfbWVtY3B5KSk7CisgICAgcmV0dXJuIChkZWNvbXByZXNzX2Jsb2NrKGNwYWdlX291dCwgZGF0YV9pbiArIDIsICh2b2lkICopIGxkcl9tZW1jcHkpKTsKIAogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm03MjB0L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm03MjB0L2hhcmR3YXJlLmgKaW5kZXggMWU5Y2Q0MS4uMzA1NmNhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtNzIwdC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTcyMHQvaGFyZHdhcmUuaApAQCAtMzYsOCArMzYsNiBAQAogLyogaW5jbHVkZSBhcm1hZGlsbG8gc3BlY2lmaWMgaGFyZHdhcmUgZmlsZSBpZiB0aGVyZSB3YXMgb25lICovCiAjZWxpZiBkZWZpbmVkKENPTkZJR19JTlRFR1JBVE9SKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpCiAvKiBpbmNsdWRlIEludGVncmF0b3JDUC9DTTcyMFQgc3BlY2lmaWMgaGFyZHdhcmUgZmlsZSBpZiB0aGVyZSB3YXMgb25lICovCi0jZWxpZiBkZWZpbmVkKENPTkZJR19MUEMyMjkyKQotI2luY2x1ZGUgPGFzbS1hcm0vYXJjaC1hcm03MjB0L2xwYzIyOTJfcmVnaXN0ZXJzLmg+CiAjZWxzZQogI2Vycm9yIE5vIGhhcmR3YXJlIGZpbGUgZGVmaW5lZCBmb3IgdGhpcyBjb25maWd1cmF0aW9uCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9taWNyb2JsYXplL2VuYWJsZV9pbnQuUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxwYzIyOTIvaGFyZHdhcmUuaApzaW1pbGFyaXR5IGluZGV4IDYzJQpyZW5hbWUgZnJvbSBjcHUvbWljcm9ibGF6ZS9lbmFibGVfaW50LlMKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLWxwYzIyOTIvaGFyZHdhcmUuaAppbmRleCBjMDk2YzZjLi5mZDJiNDY0IDEwMDY0NAotLS0gYS9jcHUvbWljcm9ibGF6ZS9lbmFibGVfaW50LlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbHBjMjI5Mi9oYXJkd2FyZS5oCkBAIC0xLDcgKzEsOSBAQAorI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDcgTWljaGFsIFNpbWVrCi0gKgotICogTWljaGFsICBTSU1FSyA8bW9uc3RybW9uc3RyLmV1PgorICogQ29weXJpZ2h0IChjKSAyMDA0CUN1Y3kgU3lzdGVtcyAoaHR0cDovL3d3dy5jdWN5LmNvbSkKKyAqIEN1cnQgQnJ1bmUgPGN1cnRAY3VjeS5jb20+CiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCkBAIC0xMyw3ICsxNSw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yMiwxNyArMjQsMTAgQEAKICAqIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotCS50ZXh0Ci0JLmdsb2JsCW1pY3JvYmxhemVfZW5hYmxlX2ludGVycnVwdHMKLQkuZW50CW1pY3JvYmxhemVfZW5hYmxlX2ludGVycnVwdHMKLQkuYWxpZ24JMgotbWljcm9ibGF6ZV9lbmFibGVfaW50ZXJydXB0czoKLQlhZGRpCXIxLCByMSwgLTQKLQlzd2kJcjEyLCByMSwgMAotCW1mcwlyMTIsIHJtc3IKLQlvcmkJcjEyLCByMTIsIDIKLQltdHMJcm1zciwgcjEyCi0JbHdpCXIxMiwgcjEsIDAKLQlydHNkCXIxNSwgOAotCWFkZGkJcjEsIHIxLCA0Ci0JLmVuZAltaWNyb2JsYXplX2VuYWJsZV9pbnRlcnJ1cHRzCisjaWYgZGVmaW5lZChDT05GSUdfTFBDMjI5MikKKyNpbmNsdWRlIDxhc20tYXJtL2FyY2gtbHBjMjI5Mi9scGMyMjkyX3JlZ2lzdGVycy5oPgorI2Vsc2UKKyNlcnJvciBObyBoYXJkd2FyZSBmaWxlIGRlZmluZWQgZm9yIHRoaXMgY29uZmlndXJhdGlvbgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTcyMHQvbHBjMjI5Ml9yZWdpc3RlcnMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxwYzIyOTIvbHBjMjI5Ml9yZWdpc3RlcnMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtNzIwdC9scGMyMjkyX3JlZ2lzdGVycy5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1scGMyMjkyL2xwYzIyOTJfcmVnaXN0ZXJzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTcyMHQvbW1jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1scGMyMjkyL21tYy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm03MjB0L21tYy5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1scGMyMjkyL21tYy5oCmRpZmYgLS1naXQgYS9ib2FyZC9scGMyMjkyc29kaW1tL3NwaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbHBjMjI5Mi9zcGkuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvbHBjMjI5MnNvZGltbS9zcGkuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtbHBjMjI5Mi9zcGkuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9hc20uaCBiL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjEwZjg5YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvYXNtLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNyBNaWNoYWwgU2ltZWsKKyAqCisgKiBNaWNoYWwgIFNJTUVLIDxtb25zdHJAbW9uc3RyLmV1PgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qIEZTTCBtYWNyb3MgKi8KKyNkZWZpbmUgTkdFVCh2YWwsIGZzbG51bSkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgibmdldCAlMCwgcmZzbCIgI2ZzbG51bSA6Ij1yIiAodmFsKSk7CisKKyNkZWZpbmUgR0VUKHZhbCwgZnNsbnVtKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJnZXQgJTAsIHJmc2wiICNmc2xudW0gOiI9ciIgKHZhbCkpOworCisjZGVmaW5lIE5DR0VUKHZhbCwgZnNsbnVtKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJuY2dldCAlMCwgcmZzbCIgI2ZzbG51bSA6Ij1yIiAodmFsKSk7CisKKyNkZWZpbmUgQ0dFVCh2YWwsIGZzbG51bSkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgiY2dldCAlMCwgcmZzbCIgI2ZzbG51bSA6Ij1yIiAodmFsKSk7CisKKyNkZWZpbmUgTlBVVCh2YWwsIGZzbG51bSkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgibnB1dCAlMCwgcmZzbCIgI2ZzbG51bSA6OiJyIiAodmFsKSk7CisKKyNkZWZpbmUgUFVUKHZhbCwgZnNsbnVtKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJwdXQgJTAsIHJmc2wiICNmc2xudW0gOjoiciIgKHZhbCkpOworCisjZGVmaW5lIE5DUFVUKHZhbCwgZnNsbnVtKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJuY3B1dCAlMCwgcmZzbCIgI2ZzbG51bSA6OiJyIiAodmFsKSk7CisKKyNkZWZpbmUgQ1BVVCh2YWwsIGZzbG51bSkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgiY3B1dCAlMCwgcmZzbCIgI2ZzbG51bSA6OiJyIiAodmFsKSk7CisKKy8qIENQVSBkZXBlbmRlbnQgKi8KKy8qIG1hY2hpbmUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIE1GUyh2YWwsIHJlZykgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgibWZzICUwLCIgI3JlZyA6Ij1yIiAodmFsKSk7CisKKyNkZWZpbmUgTVRTKHZhbCwgcmVnKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtdHMgIiAjcmVnICIsICUwIjo6InIiICh2YWwpKTsKKworLyogZ2V0IHJldHVybiBhZGRyZXNzIGZyb20gaW50ZXJydXB0ICovCisjZGVmaW5lIFIxNCh2YWwpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImFkZGkgJTAsIHIxNCwgMCI6Ij1yIiAodmFsKSk7CisKKyNkZWZpbmUgTk9QCV9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIik7CisKKy8qIHVzZSBtYWNoaW5lIHN0YXR1cyByZWdpc3RlIFVTRV9NU1JfUkVHICovCisjaWZkZWYgWElMSU5YX1VTRV9NU1JfSU5TVFIKKyNkZWZpbmUgTVNSU0VUKHZhbCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgibXNyc2V0IHIwLCIgI3ZhbCApOworCisjZGVmaW5lIE1TUkNMUih2YWwpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1zcmNsciByMCwiICN2YWwgKTsKKworI2Vsc2UKKyNkZWZpbmUgTVNSU0VUKHZhbCkJCQkJCQlcCit7CQkJCQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgdG1wOwkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgiCQkJCQlcCisJCQltZnMgCSUwLCBybXNyOwkJCVwKKwkJCW9yaQklMCwgJTAsICIjdmFsIjsJCQlcCisJCQltdHMJcm1zciwgJTA7CQkJXAorCQkJbm9wOyIJCQkJCVwKKwkJCTogIj1yIiAodG1wKQkJCQlcCisJCQk6ICJkIiAodmFsKQkJCQlcCisJCQk6ICJtZW1vcnkiKTsJCQkJXAorfQorCisjZGVmaW5lIE1TUkNMUih2YWwpCQkJCQkJXAorewkJCQkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIHRtcDsJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIgkJCQkJXAorCQkJbWZzIAklMCwgcm1zcjsJCQlcCisJCQlhbmRpCSUwLCAlMCwgfiIjdmFsIjsJCVwKKwkJCW10cwlybXNyLCAlMDsJCQlcCisJCQlub3A7IgkJCQkJXAorCQkJOiAiPXIiICh0bXApCQkJCVwKKwkJCTogImQiICh2YWwpCQkJCVwKKwkJCTogIm1lbW9yeSIpOwkJCQlcCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvbWljcm9ibGF6ZV9pbnRjLmggYi9pbmNsdWRlL2FzbS1taWNyb2JsYXplL21pY3JvYmxhemVfaW50Yy5oCmluZGV4IDY2MzVhZWEuLjRjMzg1YWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvbWljcm9ibGF6ZV9pbnRjLmgKKysrIGIvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9taWNyb2JsYXplX2ludGMuaApAQCAtMzgsMyArMzgsNiBAQAogCXZvaWQgKmFyZzsKIAlpbnQgY291bnQ7IC8qIG51bWJlciBvZiBpbnRlcnJ1cHQgKi8KIH07CisKK3ZvaWQgaW5zdGFsbF9pbnRlcnJ1cHRfaGFuZGxlciAoaW50IGlycSwgaW50ZXJydXB0X2hhbmRsZXJfdCAqIGhkbHIsCisJCQkJICAgICAgIHZvaWQgKmFyZyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvZTMwMC5oIGIvaW5jbHVkZS9hc20tcHBjL2UzMDAuaAppbmRleCBmZjk1MTJmLi5kMWJiMTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvZTMwMC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9lMzAwLmgKQEAgLTYsMTkgKzYsOSBAQAogI2lmbmRlZglfX0UzMDBfSF9fCiAjZGVmaW5lIF9fRTMwMF9IX18KIAotLyoKLSAqIGUzMDAgUHJvY2Vzc29yIFZlcnNpb24gJiBSZXZpc2lvbiBOdW1iZXJzCi0gKi8KLSNkZWZpbmUgUFZSXzgzeHggMHg4MDgzMDAwMAotI2RlZmluZSBQVlJfODM0OV9SRVYxMCAoUFZSXzgzeHggfCAweDAwMTApCi0jZGVmaW5lIFBWUl84MzQ5X1JFVjExIChQVlJfODN4eCB8IDB4MDAxMSkKLSNkZWZpbmUgUFZSXzgzNjBfUkVWMTAgKFBWUl84M3h4IHwgMHgwMDIwKQotI2RlZmluZSBQVlJfODM2MF9SRVYxMSAoUFZSXzgzeHggfCAweDAwMjApCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NUEM4MzJYKQotI3VuZGVmIFBWUl84M3h4Ci0jZGVmaW5lIFBWUl84M3h4IDB4ODA4NDAwMDAKLSNlbmRpZgorI2RlZmluZSBQVlJfRTMwMEMxCTB4ODA4MzAwMDAKKyNkZWZpbmUgUFZSX0UzMDBDMgkweDgwODQwMDAwCisjZGVmaW5lIFBWUl9FMzAwQzMJMHg4MDg1MDAwMAogCiAvKgogICogSGFyZHdhcmUgSW1wbGVtZW50YXRpb24tRGVwZW5kZW50IFJlZ2lzdGVyIDAgKEhJRDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvZ2xvYmFsX2RhdGEuaCBiL2luY2x1ZGUvYXNtLXBwYy9nbG9iYWxfZGF0YS5oCmluZGV4IDI2YmM4NzUuLmNkMjQ2MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9nbG9iYWxfZGF0YS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9nbG9iYWxfZGF0YS5oCkBAIC01NSwxMSArNTUsMTMgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NUEM4M1hYKQogCS8qIFRoZXJlIGFyZSBvdGhlciBjbG9ja3MgaW4gdGhlIE1QQzgzWFggKi8KIAl1MzIgY3NiX2NsazsKLSNpZiBkZWZpbmVkIChDT05GSUdfTVBDODM0WCkKKyNpZiBkZWZpbmVkIChDT05GSUdfTVBDODM0WCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODMxWCkKIAl1MzIgdHNlYzFfY2xrOwogCXUzMiB0c2VjMl9jbGs7Ci0JdTMyIHVzYm1waF9jbGs7CiAJdTMyIHVzYmRyX2NsazsKKyNlbmRpZgorI2lmIGRlZmluZWQgKENPTkZJR19NUEM4MzRYKQorCXUzMiB1c2JtcGhfY2xrOwogI2VuZGlmIC8qIENPTkZJR19NUEM4MzRYICovCiAJdTMyIGNvcmVfY2xrOwogCXUzMiBpMmMxX2NsazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF84M3h4LmggYi9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfODN4eC5oCmluZGV4IDVlMDg4ZDYuLjBkZTkzMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF84M3h4LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2ltbWFwXzgzeHguaApAQCAtMjA2LDcgKzIwNiw5IEBACiAJdTMyIHBtY2NyOwkJLyogUE1DIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KIAl1MzIgcG1jZXI7CQkvKiBQTUMgRXZlbnQgUmVnaXN0ZXIgKi8KIAl1MzIgcG1jbXI7CQkvKiBQTUMgTWFzayBSZWdpc3RlciAqLwotCXU4IHJlczBbMHhGNF07CisJdTMyIHBtY2NyMTsJCS8qIFBNQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKwl1MzIgcG1jY3IyOwkJLyogUE1DIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworCXU4IHJlczBbMHhFQ107CiB9IHBtYzgzeHhfdDsKIAogLyoKQEAgLTM1NSw3ICszNTcsOCBAQAogCXU4IHJlczJbMHg4XTsKIAl1MzIgbXJ0cHI7CQkvKiBNZW1vcnkgUmVmcmVzaCBUaW1lciBQcmVzY2FsZXIgUmVnaXN0ZXIgKi8KIAl1MzIgbWRyOwkJLyogVVBNIERhdGEgUmVnaXN0ZXIgKi8KLQl1OCByZXMzWzB4OF07CisJdTggcmVzM1sweDRdOworCXUzMiBsc29yOwkJLyogU3BlY2lhbCBPcGVyYXRpb24gSW5pdGlhdGlvbiBSZWdpc3RlciAqLwogCXUzMiBsc2RtcjsJCS8qIFNEUkFNIE1vZGUgUmVnaXN0ZXIgKi8KIAl1OCByZXM0WzB4OF07CiAJdTMyIGx1cnQ7CQkvKiBVUE0gUmVmcmVzaCBUaW1lciAqLwpAQCAtMzY5LDggKzM3MiwxNCBAQAogCXU4IHJlczZbMHhDXTsKIAl1MzIgbGJjcjsJCS8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KIAl1MzIgbGNycjsJCS8qIENsb2NrIFJhdGlvIFJlZ2lzdGVyICovCi0JdTggcmVzN1sweDI4XTsKLQl1OCByZXM4WzB4RjAwXTsKKwl1OCByZXM3WzB4OF07CisJdTMyIGZtcjsJCS8qIEZsYXNoIE1vZGUgUmVnaXN0ZXIgKi8KKwl1MzIgZmlyOwkJLyogRmxhc2ggSW5zdHJ1Y3Rpb24gUmVnaXN0ZXIgKi8KKwl1MzIgZmNyOwkJLyogRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAqLworCXUzMiBmYmFyOwkJLyogRmxhc2ggQmxvY2sgQWRkciBSZWdpc3RlciAqLworCXUzMiBmcGFyOwkJLyogRmxhc2ggUGFnZSBBZGRyIFJlZ2lzdGVyICovCisJdTMyIGZiY3I7CQkvKiBGbGFzaCBCeXRlIENvdW50IFJlZ2lzdGVyICovCisJdTggcmVzOFsweEYwOF07CiB9IGxidXM4M3h4X3Q7CiAKIC8qCkBAIC01MjcsNyArNTM2LDcgQEAKICAqIFVTQgogICovCiB0eXBlZGVmIHN0cnVjdCB1c2I4M3h4IHsKLQl1OCBmaXhtZVsweDIwMDBdOworCXU4IGZpeG1lWzB4MTAwMF07CiB9IHVzYjgzeHhfdDsKIAogLyoKQEAgLTU3NCw3ICs1ODMsNDIgQEAKIAlpb3M4M3h4X3QJCWlvczsJCS8qIFNlcXVlbmNlciAqLwogCXBjaWN0cmw4M3h4X3QJCXBjaV9jdHJsWzJdOwkvKiBQQ0kgQ29udHJvbGxlciBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXJzICovCiAJdTgJCQlyZXM1WzB4MTk5MDBdOwotCXVzYjgzeHhfdAkJdXNiOworCXVzYjgzeHhfdAkJdXNiWzJdOworCXRzZWM4M3h4X3QJCXRzZWNbMl07CisJdTgJCQlyZXM2WzB4QTAwMF07CisJc2VjdXJpdHk4M3h4X3QJCXNlY3VyaXR5OworCXU4CQkJcmVzN1sweEMwMDAwXTsKK30gaW1tYXBfdDsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODMxWCkKK3R5cGVkZWYgc3RydWN0IGltbWFwIHsKKwlzeXNjb25mODN4eF90CQlzeXNjb25mOwkvKiBTeXN0ZW0gY29uZmlndXJhdGlvbiAqLworCXdkdDgzeHhfdAkJd2R0OwkJLyogV2F0Y2ggRG9nIFRpbWVyIChXRFQpIFJlZ2lzdGVycyAqLworCXJ0Y2xrODN4eF90CQlydGM7CQkvKiBSZWFsIFRpbWUgQ2xvY2sgTW9kdWxlIFJlZ2lzdGVycyAqLworCXJ0Y2xrODN4eF90CQlwaXQ7CQkvKiBQZXJpb2RpYyBJbnRlcnZhbCBUaW1lciAqLworCWd0bTgzeHhfdAkJZ3RtWzJdOwkJLyogR2xvYmFsIFRpbWVycyBNb2R1bGUgKi8KKwlpcGljODN4eF90CQlpcGljOwkJLyogSW50ZWdyYXRlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwlhcmJpdGVyODN4eF90CQlhcmJpdGVyOwkvKiBTeXN0ZW0gQXJiaXRlciBSZWdpc3RlcnMgKi8KKwlyZXNldDgzeHhfdAkJcmVzZXQ7CQkvKiBSZXNldCBNb2R1bGUgKi8KKwljbGs4M3h4X3QJCWNsazsJCS8qIFN5c3RlbSBDbG9jayBNb2R1bGUgKi8KKwlwbWM4M3h4X3QJCXBtYzsJCS8qIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbCBNb2R1bGUgKi8KKwlncGlvODN4eF90CQlncGlvWzFdOwkvKiBHZW5lcmFsIHB1cnBvc2UgSS9PIG1vZHVsZSAqLworCXU4CQkJcmVzMFsweDEzMDBdOworCWRkcjgzeHhfdAkJZGRyOwkJLyogRERSIE1lbW9yeSBDb250cm9sbGVyIE1lbW9yeSAqLworCWZzbF9pMmNfdAkJaTJjWzJdOwkJLyogSTJDIENvbnRyb2xsZXJzICovCisJdTgJCQlyZXMxWzB4MTMwMF07CisJZHVhcnQ4M3h4X3QJCWR1YXJ0WzJdOwkvKiBEVUFSVCAqLworCXU4CQkJcmVzMlsweDkwMF07CisJbGJ1czgzeHhfdAkJbGJ1czsJCS8qIExvY2FsIEJ1cyBDb250cm9sbGVyIFJlZ2lzdGVycyAqLworCXU4CQkJcmVzM1sweDEwMDBdOworCXNwaTgzeHhfdAkJc3BpOwkJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovCisJZG1hODN4eF90CQlkbWE7CQkvKiBETUEgKi8KKwlwY2ljb25mODN4eF90CQlwY2lfY29uZlsxXTsJLyogUENJIFNvZnR3YXJlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCisJdTgJCQlyZXM0WzB4ODBdOworCWlvczgzeHhfdAkJaW9zOwkJLyogU2VxdWVuY2VyICovCisJcGNpY3RybDgzeHhfdAkJcGNpX2N0cmxbMV07CS8qIFBDSSBDb250cm9sbGVyIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcnMgKi8KKwl1OAkJCXJlczVbMHgxYWEwMF07CisJdXNiODN4eF90CQl1c2JbMV07CiAJdHNlYzgzeHhfdAkJdHNlY1syXTsKIAl1OAkJCXJlczZbMHhBMDAwXTsKIAlzZWN1cml0eTgzeHhfdAkJc2VjdXJpdHk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaW8uaCBiL2luY2x1ZGUvYXNtLXBwYy9pby5oCmluZGV4IGJiYzliYTAuLjAzMjg5YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pby5oCkBAIC0xMDUsNiArMTA1LDExIEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIiA6IDogOiAibWVtb3J5Iik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpc3luYyh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgiaXN5bmMiIDogOiA6ICJtZW1vcnkiKTsKK30KKwogLyogRW5mb3JjZSBpbi1vcmRlciBleGVjdXRpb24gb2YgZGF0YSBJL08uCiAgKiBObyBkaXN0aW5jdGlvbiBiZXR3ZWVuIHJlYWQvd3JpdGUgb24gUFBDOyB1c2UgZWllaW8gZm9yIGFsbCB0aHJlZS4KICAqLwpAQCAtMTE0LDc0ICsxMTksOTAgQEAKIAogLyoKICAqIDgsIDE2IGFuZCAzMiBiaXQsIGJpZyBhbmQgbGl0dGxlIGVuZGlhbiBJL08gb3BlcmF0aW9ucywgd2l0aCBiYXJyaWVyLgorICoKKyAqIFJlYWQgb3BlcmF0aW9ucyBoYXZlIGFkZGl0aW9uYWwgdHdpICYgaXN5bmMgdG8gbWFrZSBzdXJlIHRoZSByZWFkCisgKiBpcyBhY3R1YWxseSBwZXJmb3JtZWQgKGkuZS4gdGhlIGRhdGEgaGFzIGNvbWUgYmFjaykgYmVmb3JlIHdlIHN0YXJ0CisgKiBleGVjdXRpbmcgYW55IGZvbGxvd2luZyBpbnN0cnVjdGlvbnMuCiAgKi8KLWV4dGVybiBpbmxpbmUgaW50IGluXzgodm9sYXRpbGUgdTggKmFkZHIpCisjZGVmaW5lIF9faW9tZW0KK2V4dGVybiBpbmxpbmUgaW50IGluXzgoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICphZGRyKQogewotICAgIGludCByZXQ7CisJaW50IHJldDsKIAotICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsYnolVTElWDEgJTAsJTE7IGVpZWlvIiA6ICI9ciIgKHJldCkgOiAibSIgKCphZGRyKSk7Ci0gICAgcmV0dXJuIHJldDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInN5bmM7IGxieiVVMSVYMSAlMCwlMTtcbiIKKwkJInR3aSAwLCUwLDA7XG4iCisJCSJpc3luYyIgOiAiPXIiIChyZXQpIDogIm0iICgqYWRkcikpOworCXJldHVybiByZXQ7CiB9CiAKLWV4dGVybiBpbmxpbmUgdm9pZCBvdXRfOCh2b2xhdGlsZSB1OCAqYWRkciwgaW50IHZhbCkKK2V4dGVybiBpbmxpbmUgdm9pZCBvdXRfOCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmFkZHIsIGludCB2YWwpCiB7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YiVVMCVYMCAlMSwlMDsgZWllaW8iIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiJVUwJVgwICUxLCUwOyBlaWVpbyIgOiAiPW0iICgqYWRkcikgOiAiciIgKHZhbCkpOwogfQogCi1leHRlcm4gaW5saW5lIGludCBpbl9sZTE2KHZvbGF0aWxlIHUxNiAqYWRkcikKK2V4dGVybiBpbmxpbmUgaW50IGluX2xlMTYoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19pb21lbSAqYWRkcikKIHsKLSAgICBpbnQgcmV0OworCWludCByZXQ7CiAKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibGhicnggJTAsMCwlMTsgZWllaW8iIDogIj1yIiAocmV0KSA6Ci0JCSAgInIiIChhZGRyKSwgIm0iICgqYWRkcikpOwotICAgIHJldHVybiByZXQ7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmM7IGxoYnJ4ICUwLDAsJTE7XG4iCisJCQkgICAgICJ0d2kgMCwlMCwwO1xuIgorCQkJICAgICAiaXN5bmMiIDogIj1yIiAocmV0KSA6CisJCQkgICAgICAiciIgKGFkZHIpLCAibSIgKCphZGRyKSk7CisJcmV0dXJuIHJldDsKIH0KIAotZXh0ZXJuIGlubGluZSBpbnQgaW5fYmUxNih2b2xhdGlsZSB1MTYgKmFkZHIpCitleHRlcm4gaW5saW5lIGludCBpbl9iZTE2KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIpCiB7Ci0gICAgaW50IHJldDsKKwlpbnQgcmV0OwogCi0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxoeiVVMSVYMSAlMCwlMTsgZWllaW8iIDogIj1yIiAocmV0KSA6ICJtIiAoKmFkZHIpKTsKLSAgICByZXR1cm4gcmV0OworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jOyBsaHolVTElWDEgJTAsJTE7XG4iCisJCQkgICAgICJ0d2kgMCwlMCwwO1xuIgorCQkJICAgICAiaXN5bmMiIDogIj1yIiAocmV0KSA6ICJtIiAoKmFkZHIpKTsKKwlyZXR1cm4gcmV0OwogfQogCi1leHRlcm4gaW5saW5lIHZvaWQgb3V0X2xlMTYodm9sYXRpbGUgdTE2ICphZGRyLCBpbnQgdmFsKQorZXh0ZXJuIGlubGluZSB2b2lkIG91dF9sZTE2KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIsIGludCB2YWwpCiB7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGJyeCAlMSwwLCUyOyBlaWVpbyIgOiAiPW0iICgqYWRkcikgOgotCQkgICJyIiAodmFsKSwgInIiIChhZGRyKSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmM7IHN0aGJyeCAlMSwwLCUyIiA6ICI9bSIgKCphZGRyKSA6CisJCQkgICAgICAiciIgKHZhbCksICJyIiAoYWRkcikpOwogfQogCi1leHRlcm4gaW5saW5lIHZvaWQgb3V0X2JlMTYodm9sYXRpbGUgdTE2ICphZGRyLCBpbnQgdmFsKQorZXh0ZXJuIGlubGluZSB2b2lkIG91dF9iZTE2KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIsIGludCB2YWwpCiB7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aCVVMCVYMCAlMSwlMDsgZWllaW8iIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgc3RoJVUwJVgwICUxLCUwIiA6ICI9bSIgKCphZGRyKSA6ICJyIiAodmFsKSk7CiB9CiAKLWV4dGVybiBpbmxpbmUgdW5zaWduZWQgaW5fbGUzMih2b2xhdGlsZSB1MzIgKmFkZHIpCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGluX2xlMzIoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkcikKIHsKLSAgICB1bnNpZ25lZCByZXQ7CisJdW5zaWduZWQgcmV0OwogCi0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImx3YnJ4ICUwLDAsJTE7IGVpZWlvIiA6ICI9ciIgKHJldCkgOgotCQkgInIiIChhZGRyKSwgIm0iICgqYWRkcikpOwotICAgIHJldHVybiByZXQ7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmM7IGx3YnJ4ICUwLDAsJTE7XG4iCisJCQkgICAgICJ0d2kgMCwlMCwwO1xuIgorCQkJICAgICAiaXN5bmMiIDogIj1yIiAocmV0KSA6CisJCQkgICAgICJyIiAoYWRkciksICJtIiAoKmFkZHIpKTsKKwlyZXR1cm4gcmV0OwogfQogCi1leHRlcm4gaW5saW5lIHVuc2lnbmVkIGluX2JlMzIodm9sYXRpbGUgdTMyICphZGRyKQorZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBpbl9iZTMyKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIpCiB7Ci0gICAgdW5zaWduZWQgcmV0OworCXVuc2lnbmVkIHJldDsKIAotICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsd3olVTElWDEgJTAsJTE7IGVpZWlvIiA6ICI9ciIgKHJldCkgOiAibSIgKCphZGRyKSk7Ci0gICAgcmV0dXJuIHJldDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgbHd6JVUxJVgxICUwLCUxO1xuIgorCQkJICAgICAidHdpIDAsJTAsMDtcbiIKKwkJCSAgICAgImlzeW5jIiA6ICI9ciIgKHJldCkgOiAibSIgKCphZGRyKSk7CisJcmV0dXJuIHJldDsKIH0KIAotZXh0ZXJuIGlubGluZSB2b2lkIG91dF9sZTMyKHZvbGF0aWxlIHVuc2lnbmVkICphZGRyLCBpbnQgdmFsKQorZXh0ZXJuIGlubGluZSB2b2lkIG91dF9sZTMyKHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIsIGludCB2YWwpCiB7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2JyeCAlMSwwLCUyOyBlaWVpbyIgOiAiPW0iICgqYWRkcikgOgotCQkgInIiICh2YWwpLCAiciIgKGFkZHIpKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgc3R3YnJ4ICUxLDAsJTIiIDogIj1tIiAoKmFkZHIpIDoKKwkJCSAgICAgInIiICh2YWwpLCAiciIgKGFkZHIpKTsKIH0KIAotZXh0ZXJuIGlubGluZSB2b2lkIG91dF9iZTMyKHZvbGF0aWxlIHVuc2lnbmVkICphZGRyLCBpbnQgdmFsKQorZXh0ZXJuIGlubGluZSB2b2lkIG91dF9iZTMyKHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIsIGludCB2YWwpCiB7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0dyVVMCVYMCAlMSwlMDsgZWllaW8iIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgc3R3JVUwJVgwICUxLCUwIiA6ICI9bSIgKCphZGRyKSA6ICJyIiAodmFsKSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21tdS5oIGIvaW5jbHVkZS9hc20tcHBjL21tdS5oCmluZGV4IGIyMjY4MjUuLjQ4ZmQ5ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbW11LmgKQEAgLTM5Niw4ICszOTYsOCBAQAogI2RlZmluZSBCT09LRV9QQUdFU1pfMTZNICAgICAgICA3CiAjZGVmaW5lIEJPT0tFX1BBR0VTWl82NE0gICAgICAgIDgKICNkZWZpbmUgQk9PS0VfUEFHRVNaXzI1Nk0gICAgICAgOQotI2RlZmluZSBCT09LRV9QQUdFU1pfMUdCICAgICAgICAxMAotI2RlZmluZSBCT09LRV9QQUdFU1pfNEdCICAgICAgICAxMQorI2RlZmluZSBCT09LRV9QQUdFU1pfMUcJCTEwCisjZGVmaW5lIEJPT0tFX1BBR0VTWl80RwkJMTEKIAogI2lmIGRlZmluZWQoQ09ORklHX01QQzg2eHgpCiAjZGVmaW5lIExBV0JBUl9CQVNFX0FERFIJMHgwMEZGRkZGRgpAQCAtNDEzLDYgKzQxMyw3IEBACiAjZGVmaW5lIExBV0FSX1RSR1RfSUZfUENJMQkweDAwMDAwMDAwCiAjZGVmaW5lIExBV0FSX1RSR1RfSUZfUENJWAkweDAwMDAwMDAwCiAjZGVmaW5lIExBV0FSX1RSR1RfSUZfUENJMgkweDAwMTAwMDAwCisjZGVmaW5lIExBV0FSX1RSR1RfSUZfUEVYCTB4MDAyMDAwMDAKICNkZWZpbmUgTEFXQVJfVFJHVF9JRl9MQkMJMHgwMDQwMDAwMAogI2RlZmluZSBMQVdBUl9UUkdUX0lGX0NDU1IJMHgwMDgwMDAwMAogI2RlZmluZSBMQVdBUl9UUkdUX0lGX0REUl9JTlRFUkxFQVZFRCAweDAwQjAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1wcGMvcHJvY2Vzc29yLmgKaW5kZXggMDU4NTk2Mi4uNWVmYzNlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcm9jZXNzb3IuaApAQCAtMjMyLDYgKzIzMiw5IEBACiAjZGVmaW5lICAgSElEMF9CSFRFCSgxPDwyKQkJLyogQnJhbmNoIEhpc3RvcnkgVGFibGUgRW5hYmxlICovCiAjZGVmaW5lICAgSElEMF9CVENECSgxPDwxKQkJLyogQnJhbmNoIHRhcmdldCBjYWNoZSBkaXNhYmxlICovCiAjZGVmaW5lIFNQUk5fSElEMQkweDNGMQkvKiBIYXJkd2FyZSBJbXBsZW1lbnRhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lCSAgSElEMV9SRlhFCSgxPDwxNykJCS8qIFJlYWQgRmF1bHQgRXhjZXB0aW9uIEVuYWJsZSAqLworI2RlZmluZQkgIEhJRDFfQVNUTUUJKDE8PDEzKQkJLyogQWRkcmVzcyBidXMgc3RyZWFtaW5nIG1vZGUgKi8KKyNkZWZpbmUJICBISUQxX0FCRQkoMTw8MTIpCQkvKiBBZGRyZXNzIGJyb2FkY2FzdCBlbmFibGUgKi8KICNkZWZpbmUgU1BSTl9JQUJSCTB4M0YyCS8qIEluc3RydWN0aW9uIEFkZHJlc3MgQnJlYWtwb2ludCBSZWdpc3RlciAqLwogI2lmbmRlZiBDT05GSUdfQk9PS0UKICNkZWZpbmUgU1BSTl9JQUMxCTB4M0Y0CS8qIEluc3RydWN0aW9uIEFkZHJlc3MgQ29tcGFyZSAxICovCkBAIC00MTUsMTAgKzQxOCwxMiBAQAogI2RlZmluZSBTUFJOX0lWT1IxNQkweDE5ZgkvKiBJbnRlcnJ1cHQgVmVjdG9yIE9mZnNldCBSZWdpc3RlciAxNSAqLwogCiAvKiBlNTAwIGRlZmluaXRpb25zICovCi0jZGVmaW5lIFNQUk5fTDFDU1IwICAgICAweDNmMiAgIC8qIEwxIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fTDFDU1IwICAgICAweDNmMiAgIC8qIEwxIERhdGEgQ2FjaGUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgICBMMUNTUjBfQ1BFICAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBEYXRhIENhY2hlIFBhcml0eSBFbmFibGUgKi8KICNkZWZpbmUgICBMMUNTUjBfRENGSSAgICAgICAgICAgMHgwMDAwMDAwMiAgICAgIC8qIERhdGEgQ2FjaGUgRmxhc2ggSW52YWxpZGF0ZSAqLwogI2RlZmluZSAgIEwxQ1NSMF9EQ0UgICAgICAgICAgICAweDAwMDAwMDAxICAgICAgLyogRGF0YSBDYWNoZSBFbmFibGUgKi8KLSNkZWZpbmUgU1BSTl9MMUNTUjEgICAgIDB4M2YzICAgLyogTDEgQ2FjaGUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1BSTl9MMUNTUjEgICAgIDB4M2YzICAgLyogTDEgSW5zdHJ1Y3Rpb24gQ2FjaGUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgICBMMUNTUjFfQ1BFICAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBJbnN0cnVjdGlvbiBDYWNoZSBQYXJpdHkgRW5hYmxlICovCiAjZGVmaW5lICAgTDFDU1IxX0lDRkkgICAgICAgICAgIDB4MDAwMDAwMDIgICAgICAvKiBJbnN0cnVjdGlvbiBDYWNoZSBGbGFzaCBJbnZhbGlkYXRlICovCiAjZGVmaW5lICAgTDFDU1IxX0lDRSAgICAgICAgICAgIDB4MDAwMDAwMDEgICAgICAvKiBJbnN0cnVjdGlvbiBDYWNoZSBFbmFibGUgKi8KIApAQCAtNzAxLDggKzcwNiw2IEBACiAjZGVmaW5lIFNWUl9NSlJFVihzdnIpCSgoKHN2cikgPj4gIDQpICYgMHgwRikgICAvKiBNYWpvciBTT0MgZGVzaWduIHJldmlzaW9uIGluZGljYXRvciAqLwogI2RlZmluZSBTVlJfTU5SRVYoc3ZyKQkoKChzdnIpID4+ICAwKSAmIDB4MEYpICAgLyogTWlub3IgU09DIGRlc2lnbiByZXZpc2lvbiBpbmRpY2F0b3IgKi8KIAotLyogU3lzdGVtLU9uLUNoaXAgVmVyc2lvbiBOdW1iZXJzICh2ZXJzaW9uIGZpZWxkIG9ubHkpICovCi0jZGVmaW5lIFNWUl9NUEM1MjAwCTB4ODAxMQogCiAvKiBQcm9jZXNzb3IgVmVyc2lvbiBSZWdpc3RlciAqLwogCkBAIC04MTMsNiArODE2LDEyIEBACiAjZGVmaW5lIFBWUl84MjYwX0hJUDdSMSAweDgwODIyMDEzCiAjZGVmaW5lIFBWUl84MjYwX0hJUDdSQQkweDgwODIyMDE0CiAKKy8qCisgKiBNUEMgNTJ4eAorICovCisjZGVmaW5lIFBWUl81MjAwCTB4ODA4MjIwMTEKKyNkZWZpbmUgUFZSXzUyMDBCCTB4ODA4MjIwMTQKKwogCiAvKgogICogU3lzdGVtIFZlcnNpb24gUmVnaXN0ZXIKQEAgLTg0MCw5ICs4NDksMTIgQEAKICNkZWZpbmUgU1ZSXzg1NjAJMHg4MDcwCiAjZGVmaW5lIFNWUl84NTU1CTB4ODA3OQogI2RlZmluZSBTVlJfODU0MQkweDgwN0EKKyNkZWZpbmUgU1ZSXzg1NDQJMHg4MDM0CisjZGVmaW5lIFNWUl84NTQ0X0UJMHg4MDNDCiAjZGVmaW5lIFNWUl84NTQ4CTB4ODAzMQogI2RlZmluZSBTVlJfODU0OF9FCTB4ODAzOQogI2RlZmluZSBTVlJfODY0MQkweDgwOTAKKyNkZWZpbmUgU1ZSXzg1NjhfRQkweDgwN0QKIAogCiAvKiBJIGFtIGp1c3QgYWRkaW5nIGEgc2luZ2xlIGVudHJ5IGZvciA4MjYwIGJvYXJkcy4gIEkgdGhpbmsgd2UgbWF5IGJlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9jb25mZGVmcy5oIGIvaW5jbHVkZS9jbWRfY29uZmRlZnMuaAppbmRleCBjZjM2NTgzLi5iM2NjZGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NtZF9jb25mZGVmcy5oCisrKyBiL2luY2x1ZGUvY21kX2NvbmZkZWZzLmgKQEAgLTk0LDYgKzk0LDcgQEAKICNkZWZpbmUgQ0ZHX0NNRF9FWFQyCTB4MTAwMDAwMDAwMDAwMDAwMFVMTAkvKiBFWFQyIFN1cHBvcnQJCQkqLwogI2RlZmluZSBDRkdfQ01EX1NOVFAJMHgyMDAwMDAwMDAwMDAwMDAwVUxMCS8qIFNOVFAgc3VwcG9ydAkJCSovCiAjZGVmaW5lIENGR19DTURfRElTUExBWQkweDQwMDAwMDAwMDAwMDAwMDBVTEwJLyogRGlzcGxheSBzdXBwb3J0CQkqLworI2RlZmluZSBDRkdfQ01EX01GU0wJMHg4MDAwMDAwMDAwMDAwMDAwVUxMCS8qIEZTTCBzdXBwb3J0IGZvciBNaWNyb2JsYXplCSovCiAKICNkZWZpbmUgQ0ZHX0NNRF9BTEwJMHhGRkZGRkZGRkZGRkZGRkZGVUxMCS8qIEFMTCBjb21tYW5kcwkJCSovCiAKQEAgLTEyNSw2ICsxMjYsNyBAQAogCQkJQ0ZHX0NNRF9JUlEJfCBcCiAJCQlDRkdfQ01EX0pGRlMyCXwgXAogCQkJQ0ZHX0NNRF9LR0RCCXwgXAorCQkJQ0ZHX0NNRF9NRlNMCXwgXAogCQkJQ0ZHX0NNRF9NSUkJfCBcCiAJCQlDRkdfQ01EX01NQwl8IFwKIAkJCUNGR19DTURfTkFORAl8IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uLmggYi9pbmNsdWRlL2NvbW1vbi5oCmluZGV4IGIxNjJkYmQuLjNjNGIzN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9jb21tb24uaApAQCAtNDAyLDYgKzQwMiwxMCBAQAogdm9pZAkJcHBjU3luYyh2b2lkKTsKIHZvaWQJCXBwY0RjYnoodW5zaWduZWQgbG9uZyB2YWx1ZSk7CiAjZW5kaWYKKyNpZiBkZWZpbmVkIChDT05GSUdfTUlDUk9CTEFaRSkKK3Vuc2lnbmVkIHNob3J0CWluMTYodW5zaWduZWQgaW50KTsKK3ZvaWQJCW91dDE2KHVuc2lnbmVkIGludCwgdW5zaWduZWQgc2hvcnQgdmFsdWUpOworI2VuZGlmCiAKICNpZiBkZWZpbmVkIChDT05GSUdfTVBDODNYWCkKIHZvaWQJCXBwY0RXbG9hZCh1bnNpZ25lZCBpbnQgKmFkZHIsIHVuc2lnbmVkIGludCAqcmV0KTsKQEAgLTQ0MCw4ICs0NDQsNiBAQAogaW50CWFkanVzdF9zZHJhbV90YnNfOHh4ICh2b2lkKTsKICNpZiBkZWZpbmVkKENPTkZJR184MjYwKQogaW50CXBydF84MjYwX2Nsa3MgKHZvaWQpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODNYWCkKLWludCBwcmludF9jbG9ja19jb25mKHZvaWQpOwogI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDNXh4eCkKIGludAlwcnRfbXBjNXh4eF9jbGtzICh2b2lkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0JDMzQ1MC5oIGIvaW5jbHVkZS9jb25maWdzL0JDMzQ1MC5oCmluZGV4IDViNTRmMzAuLmJjMzA5NzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9CQzM0NTAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvQkMzNDUwLmgKQEAgLTI4MiwxNyArMjgyLDE3IEBACiAvKgogICogSVBCIEJ1cyBjbG9ja2luZyBjb25maWd1cmF0aW9uLgogICovCi0jZGVmaW5lIENGR19JUEJTUEVFRF8xMzMJCS8qIGRlZmluZSBmb3IgMTMzTUh6IHNwZWVkICovCisjZGVmaW5lIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSwkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KIAogLyoKICAqIFBDSSBCdXMgY2xvY2tpbmcgY29uZmlndXJhdGlvbgogICoKICAqIEFjdHVhbGx5IGEgUENJIENsb2NrIG9mIDY2IE1IeiBpcyBvbmx5IHNldCAoaW4gY3B1X2luaXQuYykgaWYKLSAqIENGR19JUEJTUEVFRF8xMzMgaXMgZGVmaW5lZC4gVGhpcyBpcyBiZWNhdXNlIGEgUENJIENsb2NrIG9mIDY2IE1IeiB5ZXQKLSAqIGhhc24ndCBiZWVuIHRlc3RlZCB3aXRoIGEgSVBCIEJ1cyBDbG9jayBvZiA2NiBNSHouCisgKiBDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEsgaXMgZGVmaW5lZC4gVGhpcyBpcyBiZWNhdXNlIGEgUENJIENsb2NrCisgKiAgb2YgNjYgTUh6IHlldCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgd2l0aCBhIElQQiBCdXMgQ2xvY2sgb2YgNjYgTUh6LgogICovCi0jaWYgZGVmaW5lZChDRkdfSVBCU1BFRURfMTMzKQotIyBkZWZpbmUgQ0ZHX1BDSVNQRUVEXzY2CQkJLyogZGVmaW5lIGZvciA2Nk1IeiBzcGVlZCAqLworI2lmIGRlZmluZWQoQ0ZHX0lQQkNMS19FUVVBTFNfWExCQ0xLKQorIyBkZWZpbmUgQ0ZHX1BDSUNMS19FUVVBTFNfSVBCQ0xLX0RJVjIJLyogZGVmaW5lIGZvciA2Nk1IeiBzcGVlZCAqLwogI2VuZGlmCiAKIC8qCkBAIC00ODgsNyArNDg4LDcgQEAKIAogI2RlZmluZSBDRkdfQk9PVENTX1NUQVJUCUNGR19GTEFTSF9CQVNFCiAjZGVmaW5lIENGR19CT09UQ1NfU0laRQkJQ0ZHX0ZMQVNIX1NJWkUKLSNpZmRlZiBDRkdfUENJU1BFRURfNjYKKyNpZmRlZiBDRkdfUENJQ0xLX0VRVUFMU19JUEJDTEtfRElWMgogIyBkZWZpbmUgQ0ZHX0JPT1RDU19DRkcJCTB4MDAwOERGMzAJLyogZm9yIHBjaV9jbGsJPSA2NiBNSHogKi8KICNlbHNlCiAjIGRlZmluZSBDRkdfQk9PVENTX0NGRwkJMHgwMDA0REYzMAkvKiBmb3IgcGNpX2NsayA9IDMzIE1IegkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9JY2VDdWJlLmggYi9pbmNsdWRlL2NvbmZpZ3MvSWNlQ3ViZS5oCmluZGV4IDBkMzgyNTQuLjczYmUwNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9JY2VDdWJlLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0ljZUN1YmUuaApAQCAtMTY3LDkgKzE2Nyw5IEBACiAgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19MSVRFNTIwMEIpCi0jZGVmaW5lIENGR19JUEJTUEVFRF8xMzMgCS8qIGRlZmluZSBmb3IgMTMzTUh6IHNwZWVkICovCisjZGVmaW5lIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSyAJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KICNlbHNlCi0jdW5kZWYgQ0ZHX0lQQlNQRUVEXzEzMyAgIAkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLworI3VuZGVmIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSyAgIAkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLwogI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX01QQzUyMDAgKi8KIApAQCAtMTgyLDcgKzE4Miw3IEBACiAKICNkZWZpbmUgT0ZfQ1BVCQkJIlBvd2VyUEMsNTIwMEAwIgogI2RlZmluZSBPRl9TT0MJCQkic29jNTIwMEBmMDAwMDAwMCIKLSNkZWZpbmUgT0ZfVEJDTEsJCShiZC0+YmlfYnVzZnJlcSAvIDgpCisjZGVmaW5lIE9GX1RCQ0xLCQkoYmQtPmJpX2J1c2ZyZXEgLyA0KQogI2RlZmluZSBPRl9TVERPVVRfUEFUSAkJIi9zb2M1MjAwQGYwMDAwMDAwL3NlcmlhbEAyMDAwIgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzgzMTNFUkRCLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODMxM0VSREIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTc2MzEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzgzMTNFUkRCLmgKQEAgLTAsMCArMSw1NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIDIwMDYuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKy8qCisgKiBtcGM4MzEzZXBiIGJvYXJkIGNvbmZpZ3VyYXRpb24gZmlsZQorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19FMzAwCQkxCisjZGVmaW5lIENPTkZJR19NUEM4M1hYCQkxCisjZGVmaW5lIENPTkZJR19NUEM4MzFYCQkxCisjZGVmaW5lIENPTkZJR19NUEM4MzEzCQkxCisjZGVmaW5lIENPTkZJR19NUEM4MzEzRVJEQgkxCisKKyNkZWZpbmUgQ09ORklHX1BDSQorI2RlZmluZSBDT05GSUdfODNYWF9HRU5FUklDX1BDSQorCisjaWZkZWYgQ0ZHXzY2TUhaCisjZGVmaW5lIENPTkZJR184M1hYX0NMS0lOCTY2NjY2NjY3CS8qIGluIEh6ICovCisjZWxpZiBkZWZpbmVkKENGR18zM01IWikKKyNkZWZpbmUgQ09ORklHXzgzWFhfQ0xLSU4JMzMzMzMzMzMJLyogaW4gSHogKi8KKyNlbHNlCisjZXJyb3IgVW5rbm93biBvc2NpbGxhdG9yIGZyZXF1ZW5jeS4KKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJQ09ORklHXzgzWFhfQ0xLSU4KKworI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GCQkvKiBjYWxsIGJvYXJkX3ByZV9pbml0ICovCisKKyNkZWZpbmUgQ0ZHX0lNTVIJCTB4RTAwMDAwMDAKKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDAwMDAxMDAwCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgwN2YwMDAwMAorCisvKiBFYXJseSByZXZzIG9mIHRoaXMgYm9hcmQgd2lsbCBsb2NrIHVwIGhhcmQgd2hlbiBhdHRlbXB0aW5nCisgKiB0byBhY2Nlc3MgdGhlIFBNQyByZWdpc3RlcnMsIHVubGVzcyBhIEpUQUcgZGVidWdnZXIgaXMKKyAqIGNvbm5lY3RlZCwgb3Igc29tZSByZXNpc3RvciBtb2RpZmljYXRpb25zIGFyZSBtYWRlLgorICovCisjZGVmaW5lIENGR184MzEzRVJEQl9CUk9LRU5fUE1DIDEKKworI2RlZmluZSBDRkdfQUNSX1BJUEVfREVQCTMJLyogQXJiaXRlciBwaXBlbGluZSBkZXB0aCAoMC0zKSAqLworI2RlZmluZSBDRkdfQUNSX1JQVENOVAkJMwkvKiBBcmJpdGVyIHJlcGVhdCBjb3VudCAoMC03KSAqLworCisvKgorICogRERSIFNldHVwCisgKi8KKyNkZWZpbmUgQ0ZHX0REUl9CQVNFCQkweDAwMDAwMDAwCS8qIEREUiBpcyBzeXN0ZW0gbWVtb3J5Ki8KKyNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJCUNGR19ERFJfQkFTRQorI2RlZmluZSBDRkdfRERSX1NEUkFNX0JBU0UJQ0ZHX0REUl9CQVNFCisKKy8qCisgKiBNYW51YWxseSBzZXQgdXAgRERSIHBhcmFtZXRlcnMsIGFzIHRoaXMgYm9hcmQgZG9lcyBub3QKKyAqIHNlZW0gdG8gaGF2ZSB0aGUgU1BEIGNvbm5lY3RlZCB0byBJMkMuCisgKi8KKyNkZWZpbmUgQ0ZHX0REUl9TSVpFCQkxMjgJCS8qIE1CICovCisjZGVmaW5lIENGR19ERFJfQ09ORklHCQkoIENTQ09ORklHX0VOIHwgQ1NDT05GSUdfQVAgXAorCQkJCXwgMHgwMDA0MDAwMCAvKiBUT0RPICovIFwKKwkJCQl8IENTQ09ORklHX1JPV19CSVRfMTMgfCBDU0NPTkZJR19DT0xfQklUXzEwICkKKwkJCQkvKiAweDgwODQwMTAyICovCisKKyNkZWZpbmUgQ0ZHX0REUl9USU1JTkdfMwkweDAwMDAwMDAwCisjZGVmaW5lIENGR19ERFJfVElNSU5HXzAJKCAoIDAgPDwgVElNSU5HX0NGRzBfUldUX1NISUZUICkgXAorCQkJCXwgKCAwIDw8IFRJTUlOR19DRkcwX1dSVF9TSElGVCApIFwKKwkJCQl8ICggMCA8PCBUSU1JTkdfQ0ZHMF9SUlRfU0hJRlQgKSBcCisJCQkJfCAoIDAgPDwgVElNSU5HX0NGRzBfV1dUX1NISUZUICkgXAorCQkJCXwgKCAyIDw8IFRJTUlOR19DRkcwX0FDVF9QRF9FWElUX1NISUZUICkgXAorCQkJCXwgKCAyIDw8IFRJTUlOR19DRkcwX1BSRV9QRF9FWElUX1NISUZUICkgXAorCQkJCXwgKCA4IDw8IFRJTUlOR19DRkcwX09EVF9QRF9FWElUX1NISUZUICkgXAorCQkJCXwgKCAyIDw8IFRJTUlOR19DRkcwX01SU19DWUNfU0hJRlQgKSApCisJCQkJLyogMHgwMDIyMDgwMiAqLworI2RlZmluZSBDRkdfRERSX1RJTUlOR18xCSggKCAzIDw8IFRJTUlOR19DRkcxX1BSRVRPQUNUX1NISUZUICkgXAorCQkJCXwgKCA5IDw8IFRJTUlOR19DRkcxX0FDVFRPUFJFX1NISUZUICkgXAorCQkJCXwgKCAzIDw8IFRJTUlOR19DRkcxX0FDVFRPUldfU0hJRlQgKSBcCisJCQkJfCAoIDUgPDwgVElNSU5HX0NGRzFfQ0FTTEFUX1NISUZUICkgXAorCQkJCXwgKDEzIDw8IFRJTUlOR19DRkcxX1JFRlJFQ19TSElGVCApIFwKKwkJCQl8ICggMyA8PCBUSU1JTkdfQ0ZHMV9XUlJFQ19TSElGVCApIFwKKwkJCQl8ICggMiA8PCBUSU1JTkdfQ0ZHMV9BQ1RUT0FDVF9TSElGVCApIFwKKwkJCQl8ICggMiA8PCBUSU1JTkdfQ0ZHMV9XUlRPUkRfU0hJRlQgKSApCisJCQkJLyogMHgzOTM1ZDMyMiAqLworI2RlZmluZSBDRkdfRERSX1RJTUlOR18yCSggKCAwIDw8IFRJTUlOR19DRkcyX0FERF9MQVRfU0hJRlQgKSBcCisJCQkJfCAoMzEgPDwgVElNSU5HX0NGRzJfQ1BPX1NISUZUICkgXAorCQkJCXwgKCAyIDw8IFRJTUlOR19DRkcyX1dSX0xBVF9ERUxBWV9TSElGVCApIFwKKwkJCQl8ICggMiA8PCBUSU1JTkdfQ0ZHMl9SRF9UT19QUkVfU0hJRlQgKSBcCisJCQkJfCAoIDIgPDwgVElNSU5HX0NGRzJfV1JfREFUQV9ERUxBWV9TSElGVCApIFwKKwkJCQl8ICggMyA8PCBUSU1JTkdfQ0ZHMl9DS0VfUExTX1NISUZUICkgXAorCQkJCXwgKDEwIDw8IFRJTUlOR19DRkcyX0ZPVVJfQUNUX1NISUZUKSApCisJCQkJLyogMHgwZjkwNDhjYSAqLyAvKiBQOS00NSxtYXkgbmVlZCB0dW5pbmcgKi8KKyNkZWZpbmUgQ0ZHX0REUl9JTlRFUlZBTAkoICggODAwIDw8IFNEUkFNX0lOVEVSVkFMX1JFRklOVF9TSElGVCApIFwKKwkJCQl8ICggMTAwIDw8IFNEUkFNX0lOVEVSVkFMX0JTVE9QUkVfU0hJRlQgKSApCisJCQkJLyogMHgwMzIwMDA2NCAqLworI2lmIGRlZmluZWQoQ09ORklHX0REUl8yVF9USU1JTkcpCisjZGVmaW5lIENGR19TRFJBTV9DRkcJCSggU0RSQU1fQ0ZHX1NSRU4gXAorCQkJCXwgMyA8PCBTRFJBTV9DRkdfU0RSQU1fVFlQRV9TSElGVCBcCisJCQkJfCBTRFJBTV9DRkdfMlRfRU4gXAorCQkJCXwgU0RSQU1fQ0ZHX0RCV18zMiApCisjZWxzZQorI2RlZmluZSBDRkdfU0RSQU1fQ0ZHCQkoIFNEUkFNX0NGR19TUkVOIFwKKwkJCQl8IDMgPDwgU0RSQU1fQ0ZHX1NEUkFNX1RZUEVfU0hJRlQgXAorCQkJCXwgU0RSQU1fQ0ZHXzMyX0JFICkKKwkJCQkvKiAweDQzMDgwMDAwICovCisjZW5kaWYKKyNkZWZpbmUgQ0ZHX1NEUkFNX0NGRzIJCTB4MDA0MDEwMDA7CisvKiBzZXQgYnVyc3QgbGVuZ3RoIHRvIDggZm9yIDMyLWJpdCBkYXRhIHBhdGggKi8KKyNkZWZpbmUgQ0ZHX0REUl9NT0RFCQkoICggMHg0NDQwIDw8IFNEUkFNX01PREVfRVNEX1NISUZUICkgXAorCQkJCXwgKCAweDAyMzIgPDwgU0RSQU1fTU9ERV9TRF9TSElGVCApICkKKwkJCQkvKiAweDQ0NDAwMjMyICovCisjZGVmaW5lIENGR19ERFJfTU9ERV8yCQkweDgwMDBDMDAwOworCisjZGVmaW5lIENGR19ERFJfQ0xLX0NOVEwJRERSX1NEUkFNX0NMS19DTlRMX0NMS19BREpVU1RfMDUKKwkJCQkvKjB4MDIwMDAwMDAqLworI2RlZmluZSBDRkdfRERSQ0RSX1ZBTFVFCSggRERSQ0RSX0VOIFwKKwkJCQl8IEREUkNEUl9QWl9OT01aIFwKKwkJCQl8IEREUkNEUl9OWl9OT01aIFwKKwkJCQl8IEREUkNEUl9NX09EUiApCisKKy8qCisgKiBGTEFTSCBvbiB0aGUgTG9jYWwgQnVzCisgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCQkvKiB1c2UgdGhlIENvbW1vbiBGbGFzaCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiB1c2UgdGhlIENGSSBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4RkUwMDAwMDAJLyogc3RhcnQgb2YgRkxBU0ggICAqLworI2RlZmluZSBDRkdfRkxBU0hfU0laRQkJOAkJLyogZmxhc2ggc2l6ZSBpbiBNQiAqLworI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTwkJCS8qIGRpc3BsYXkgZW1wdHkgc2VjdG9ycyAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkJLyogYnVmZmVyIHVwIG11bHRpcGxlIGJ5dGVzICovCisKKyNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0JCShDRkdfRkxBU0hfQkFTRSB8CS8qIGZsYXNoIEJhc2UgYWRkcmVzcyAqLyBcCisJCQkJKDIgPDwgQlJfUFNfU0hJRlQpIHwJLyogMTYgYml0IHBvcnQgc2l6ZSAqLyBcCisJCQkJQlJfVikJCQkvKiB2YWxpZCAqLworI2RlZmluZSBDRkdfT1IwX1BSRUxJTQkJKCAweEZGMDAwMDAwCQkvKiAxNiBNQnl0ZSAqLyBcCisJCQkJfCBPUl9HUENNX1hBQ1MgXAorCQkJCXwgT1JfR1BDTV9TQ1lfOSBcCisJCQkJfCBPUl9HUENNX0VIVFIgXAorCQkJCXwgT1JfR1BDTV9FQUQgKQorCQkJCS8qIDB4RkYwMDZGRjcJVE9ETyBTTE9XIDE2IE1CIGZsYXNoIHNpemUgKi8KKyNkZWZpbmUgQ0ZHX0xCTEFXQkFSMF9QUkVMSU0JQ0ZHX0ZMQVNIX0JBU0UJLyogd2luZG93IGJhc2UgYXQgZmxhc2ggYmFzZSAqLworI2RlZmluZSBDRkdfTEJMQVdBUjBfUFJFTElNCTB4ODAwMDAwMTcJLyogMTYgTUIgd2luZG93IHNpemUgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJCS8qIG51bWJlciBvZiBiYW5rcyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJMTM1CQkvKiBzZWN0b3JzIHBlciBkZXZpY2UgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAk2MDAwMAkvKiBGbGFzaCBFcmFzZSBUaW1lb3V0IChtcykgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIEZsYXNoIFdyaXRlIFRpbWVvdXQgKG1zKSAqLworCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJVEVYVF9CQVNFCS8qIHN0YXJ0IG9mIG1vbml0b3IgKi8KKworI2lmIChDRkdfTU9OSVRPUl9CQVNFIDwgQ0ZHX0ZMQVNIX0JBU0UpCisjZGVmaW5lIENGR19SQU1CT09UCisjZW5kaWYKKworI2RlZmluZSBDRkdfSU5JVF9SQU1fTE9DSwkxCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4RkQwMDAwMDAJLyogSW5pdGlhbCBSQU0gYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MTAwMAkJLyogRW5kIG9mIHVzZWQgYXJlYSBpbiBSQU0qLworCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTB4MTAwCQkvKiBudW0gYnl0ZXMgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQKKworI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCSgyNTYgKiAxMDI0KQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoNTEyICogMTAyNCkJLyogUmVzZXJ2ZWQgZm9yIG1hbGxvYyAqLworCisvKgorICogTG9jYWwgQnVzIExDUlIgYW5kIExCQ1IgcmVncworICovCisjZGVmaW5lIENGR19MQ1JSCUxDUlJfRUFEQ18xIHwgTENSUl9DTEtESVZfMgkvKiAweDAwMDEwMDAyICovCisjZGVmaW5lIENGR19MQkNfTEJDUgkoIDB4MDAwNDAwMDAgLyogVE9ETyAqLyBcCisJCQl8ICgweEZGIDw8IExCQ1JfQk1UX1NISUZUKSBcCisJCQl8IDB4RiApCS8qIDB4MDAwNGZmMGYgKi8KKworI2RlZmluZSBDRkdfTEJDX01SVFBSCTB4MjAwMDAwMDAgIC8qVE9ETyAqLyAJLyogTEIgcmVmcmVzaCB0aW1lciBwcmVzY2FsLCAyNjZNSHovMzIgKi8KKworLyogZHJpdmVycy9uYW5kL25hbmQuYyAqLworI2RlZmluZSBDRkdfTkFORF9CQVNFCQkweEUyODAwMDAwCS8qIDB4RjAwMDAwMDAgKi8KKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkxCisjZGVmaW5lIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUKKworI2RlZmluZSBDRkdfQlIxX1BSRUxJTQkJKCBDRkdfTkFORF9CQVNFIFwKKwkJCQl8ICgyPDxCUl9ERUNDX1NISUZUKQkvKiBVc2UgSFcgRUNDICovIFwKKwkJCQl8IEJSX1BTXzgJCS8qIFBvcnQgU2l6ZSA9IDggYml0ICovIFwKKwkJCQl8IEJSX01TX0ZDTQkJLyogTVNFTCA9IEZDTSAqLyBcCisJCQkJfCBCUl9WICkJCS8qIHZhbGlkICovCisjZGVmaW5lIENGR19PUjFfUFJFTElNCQkoIDB4RkZGRjgwMDAJCS8qIGxlbmd0aCAzMksgKi8gXAorCQkJCXwgT1JfRkNNX0NTQ1QgXAorCQkJCXwgT1JfRkNNX0NTVCBcCisJCQkJfCBPUl9GQ01fQ0hUIFwKKwkJCQl8IE9SX0ZDTV9TQ1lfMSBcCisJCQkJfCBPUl9GQ01fVFJMWCBcCisJCQkJfCBPUl9GQ01fRUhUUiApCisJCQkJLyogMHhGRkZGODM5NiAqLworI2RlZmluZSBDRkdfTEJMQVdCQVIxX1BSRUxJTQlDRkdfTkFORF9CQVNFCisjZGVmaW5lIENGR19MQkxBV0FSMV9QUkVMSU0JMHg4MDAwMDAwRQkvKiAzMktCICAqLworCisjZGVmaW5lIENGR19WU0M3Mzg1X0JBU0UJMHhGMDAwMDAwMAorCisjZGVmaW5lIENPTkZJR19WU0M3Mzg1X0VORVQJCQkvKiBWU0M3Mzg1IGV0aGVybmV0IHN1cHBvcnQgKi8KKyNkZWZpbmUgQ0ZHX0JSMl9QUkVMSU0JCTB4ZjAwMDA4MDEJLyogVlNDNzM4NSBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX09SMl9QUkVMSU0JCTB4ZmZmZTA5ZmYJLyogVlNDNzM4NSwgMTI4SyBieXRlcyovCisjZGVmaW5lIENGR19MQkxBV0JBUjJfUFJFTElNCUNGR19WU0M3Mzg1X0JBU0UvKiBBY2Nlc3Mgd2luZG93IGJhc2UgYXQgVlNDNzM4NSBiYXNlICovCisjZGVmaW5lIENGR19MQkxBV0FSMl9QUkVMSU0JMHg4MDAwMDAxMAkvKiBBY2Nlc3Mgd2luZG93IHNpemUgMTI4SyAqLworCisvKiBsb2NhbCBidXMgcmVhZCB3cml0ZSBidWZmZXIgbWFwcGluZyAqLworI2RlZmluZSBDRkdfQlIzX1BSRUxJTQkJMHhGQTAwMDgwMQkvKiBtYXAgYXQgMHhGQTAwMDAwMCAqLworI2RlZmluZSBDRkdfT1IzX1BSRUxJTQkJMHhGRkZGOEZGNwkvKiAzMmtCICovCisjZGVmaW5lIENGR19MQkxBV0JBUjNfUFJFTElNCTB4RkEwMDAwMDAKKyNkZWZpbmUgQ0ZHX0xCTEFXQVIzX1BSRUxJTQkweDgwMDAwMDBFCS8qIDMyS0IgICovCisKKy8qIHBhc3Mgb3BlbiBmaXJtd2FyZSBmbGF0IHRyZWUgKi8KKyNkZWZpbmUgQ09ORklHX09GX0ZMQVRfVFJFRQkxCisjZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAkxCisKKy8qIG1heGltdW0gc2l6ZSBvZiB0aGUgZmxhdCB0cmVlICg4SykgKi8KKyNkZWZpbmUgT0ZfRkxBVF9UUkVFX01BWF9TSVpFCTgxOTIKKworI2RlZmluZSBPRl9DUFUJCQkiUG93ZXJQQyw4MzEzQDAiCisjZGVmaW5lIE9GX1NPQwkJCSJzb2M4MzEzQGUwMDAwMDAwIgorI2RlZmluZSBPRl9UQkNMSwkJKGJkLT5iaV9idXNmcmVxIC8gNCkKKyNkZWZpbmUgT0ZfU1RET1VUX1BBVEgJCSIvc29jODMxM0BlMDAwMDAwMC9zZXJpYWxANDUwMCIKKworLyoKKyAqIFNlcmlhbCBQb3J0CisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVgJMQorI2RlZmluZSBDRkdfTlMxNjU1MAorI2RlZmluZSBDRkdfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUJMQorI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsJCWdldF9idXNfZnJlcSgwKQorCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQlcCisJezMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDExNTIwMH0KKworI2RlZmluZSBDRkdfTlMxNjU1MF9DT00xCShDRkdfSU1NUisweDQ1MDApCisjZGVmaW5lIENGR19OUzE2NTUwX0NPTTIJKENGR19JTU1SKzB4NDYwMCkKKworLyogVXNlIHRoZSBIVVNIIHBhcnNlciAqLworI2RlZmluZSBDRkdfSFVTSF9QQVJTRVIKKyNkZWZpbmUgQ0ZHX1BST01QVF9IVVNIX1BTMiAiPiAiCisKKy8qIEkyQyAqLworI2RlZmluZSBDT05GSUdfSEFSRF9JMkMJCQkvKiBJMkMgd2l0aCBoYXJkd2FyZSBzdXBwb3J0Ki8KKyNkZWZpbmUgQ09ORklHX0ZTTF9JMkMKKyNkZWZpbmUgQ09ORklHX0kyQ19NVUxUSV9CVVMKKyNkZWZpbmUgQ09ORklHX0kyQ19DTURfVFJFRQorI2RlZmluZSBDRkdfSTJDX1NQRUVECQk0MDAwMDAJLyogSTJDIHNwZWVkIGFuZCBzbGF2ZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JMkNfU0xBVkUJCTB4N0YKKyNkZWZpbmUgQ0ZHX0kyQ19OT1BST0JFUwl7MHg2OX0JLyogRG9uJ3QgcHJvYmUgdGhlc2UgYWRkcnMgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19PRkZTRVQJCTB4MzAwMAorI2RlZmluZSBDRkdfSTJDMl9PRkZTRVQJCTB4MzEwMAorCisvKiBUU0VDICovCisjZGVmaW5lIENGR19UU0VDMV9PRkZTRVQJMHgyNDAwMAorI2RlZmluZSBDRkdfVFNFQzEJCShDRkdfSU1NUitDRkdfVFNFQzFfT0ZGU0VUKQorI2RlZmluZSBDRkdfVFNFQzJfT0ZGU0VUCTB4MjUwMDAKKyNkZWZpbmUgQ0ZHX1RTRUMyCQkoQ0ZHX0lNTVIrQ0ZHX1RTRUMyX09GRlNFVCkKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQorCisvKgorICogR2VuZXJhbCBQQ0kKKyAqIEFkZHJlc3NlcyBhcmUgbWFwcGVkIDEtMS4KKyAqLworI2RlZmluZSBDRkdfUENJMV9NRU1fQkFTRQkweDgwMDAwMDAwCisjZGVmaW5lIENGR19QQ0kxX01FTV9QSFlTCUNGR19QQ0kxX01FTV9CQVNFCisjZGVmaW5lIENGR19QQ0kxX01FTV9TSVpFCTB4MTAwMDAwMDAJLyogMjU2TSAqLworI2RlZmluZSBDRkdfUENJMV9NTUlPX0JBU0UJMHg5MDAwMDAwMAorI2RlZmluZSBDRkdfUENJMV9NTUlPX1BIWVMJQ0ZHX1BDSTFfTU1JT19CQVNFCisjZGVmaW5lIENGR19QQ0kxX01NSU9fU0laRQkweDEwMDAwMDAwCS8qIDI1Nk0gKi8KKyNkZWZpbmUgQ0ZHX1BDSTFfSU9fQkFTRQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19QQ0kxX0lPX1BIWVMJMHhFMjAwMDAwMAorI2RlZmluZSBDRkdfUENJMV9JT19TSVpFCTB4MDAxMDAwMDAJLyogMU0gKi8KKworI2RlZmluZSBDT05GSUdfUENJX1BOUAkJLyogZG8gcGNpIHBsdWctYW5kLXBsYXkgKi8KKyNkZWZpbmUgQ0ZHX1BDSV9TVUJTWVNfVkVORE9SSUQgMHgxMDU3CS8qIE1vdG9yb2xhICovCisKKy8qCisgKiBUU0VDIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfVFNFQ19FTkVUCQkvKiBUU0VDIGV0aGVybmV0IHN1cHBvcnQgKi8KKworI2lmbmRlZiBDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJCTEKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19HTUlJCQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgQ09ORklHX01QQzgzWFhfVFNFQzEJCTEKKworI2RlZmluZSBDT05GSUdfTVBDODNYWF9UU0VDMV9OQU1FCSJUU0VDMCIKKyNkZWZpbmUgQ09ORklHX01QQzgzWFhfVFNFQzIJCTEKKyNkZWZpbmUgQ09ORklHX01QQzgzWFhfVFNFQzJfTkFNRQkiVFNFQzEiCisjZGVmaW5lIFRTRUMxX1BIWV9BRERSCQkJMHgxYworI2RlZmluZSBUU0VDMl9QSFlfQUREUgkJCTQKKyNkZWZpbmUgVFNFQzFfUEhZSURYCQkJMAorI2RlZmluZSBUU0VDMl9QSFlJRFgJCQkwCisKKy8qIE9wdGlvbnMgYXJlOiBUU0VDWzAtMV0gKi8KKyNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkJIlRTRUMxIgorCisvKgorICogQ29uZmlndXJlIG9uLWJvYXJkIFJUQworICovCisjZGVmaW5lIENPTkZJR19SVENfRFMxMzM3CisjZGVmaW5lIENGR19JMkNfUlRDX0FERFIJCTB4NjgKKworLyoKKyAqIEVudmlyb25tZW50CisgKi8KKyNpZm5kZWYgQ0ZHX1JBTUJPT1QKKwkjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorCSNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX01PTklUT1JfQkFTRSArIDB4NDAwMDApCisJI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkweDEwMDAwCS8qIDY0SyhvbmUgc2VjdG9yKSBmb3IgZW52ICovCisJI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMAorCisvKiBBZGRyZXNzIGFuZCBzaXplIG9mIFJlZHVuZGFudCBFbnZpcm9ubWVudCBTZWN0b3IgKi8KKyNlbHNlCisJI2RlZmluZSBDRkdfRU5WX0lTX05PV0hFUkUJMQkvKiBTdG9yZSBFTlYgaW4gbWVtb3J5IG9ubHkgKi8KKwkjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19NT05JVE9SX0JBU0UgLSAweDEwMDApCisJI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMAorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQkvKiBlY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQgKi8KKyNkZWZpbmUgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCTEJLyogYWxsb3cgYmF1ZHJhdGUgY2hhbmdlICovCisKKyNkZWZpbmUgQ0ZHX0JBU0VfQ09NTUFORFMJKCBDT05GSUdfQ01EX0RGTAlcCisJCQkJfCBDRkdfQ01EX1BJTkcJCVwKKwkJCQl8IENGR19DTURfREhDUAkJXAorCQkJCXwgQ0ZHX0NNRF9JMkMJCVwKKwkJCQl8IENGR19DTURfTUlJCQlcCisJCQkJfCBDRkdfQ01EX0RBVEUJCVwKKwkJCQl8IENGR19DTURfUENJKQorCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcgMQorCisjZGVmaW5lIENGR19SQU1CT09UX0NPTU1BTkRTCShDRkdfQkFTRV9DT01NQU5EUyAmIFwKKwkJCQkgfihDRkdfQ01EX0VOViB8IENGR19DTURfTE9BRFMpKQorCisjaWYgZGVmaW5lZChDRkdfUkFNQk9PVCkKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTIENGR19SQU1CT09UX0NPTU1BTkRTCisjZWxzZQorI2RlZmluZSBDT05GSUdfQ09NTUFORFMgQ0ZHX0JBU0VfQ09NTUFORFMKKyNlbmRpZgorCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkgKi8KKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkweDIwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkiPT4gIgkJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCTEwMjQJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisKKyNkZWZpbmUgQ0ZHX1BCU0laRSAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19IWgkJMTAwMAkJLyogZGVjcmVtZW50ZXIgZnJlcTogMW1zIHRpY2tzICovCisKKy8qCisgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lIENGR19CT09UTUFQU1oJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLworCisvKiBDYWNoZSBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIENGR19EQ0FDSEVfU0laRQkJMTYzODQKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFCTMyCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0hJRlQJNQkvKmxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlKi8KKworI2RlZmluZSBDRkdfUkNXSF9QQ0lIT1NUIDB4ODAwMDAwMDAJLyogUENJSE9TVCAgKi8KKworI2lmZGVmIENGR182Nk1IWgorCisvKiA2Nk1IeiBJTiwgMTMzTUh6IENTQiwgMjY2IEREUiwgMjY2IENPUkUgKi8KKy8qIDB4NjIwNDAwMDAgKi8KKyNkZWZpbmUgQ0ZHX0hSQ1dfTE9XIChcCisJMHgyMDAwMDAwMCAvKiByZXNlcnZlZCwgbXVzdCBiZSBzZXQgKi8gfFwKKwlIUkNXTF9ERFJDTSB8XAorCUhSQ1dMX0xDTF9CVVNfVE9fU0NCX0NMS18xWDEgfFwKKwlIUkNXTF9ERFJfVE9fU0NCX0NMS18yWDEgfFwKKwlIUkNXTF9DU0JfVE9fQ0xLSU5fMlgxIHxcCisJSFJDV0xfQ09SRV9UT19DU0JfMlgxKQorCisjZWxpZiBkZWZpbmVkKENGR18zM01IWikKKworLyogMzNNSHogSU4sIDE2NU1IeiBDU0IsIDMzMCBERFIsIDMzMCBDT1JFICovCisvKiAweDY1MDQwMDAwICovCisjZGVmaW5lIENGR19IUkNXX0xPVyAoXAorCTB4MjAwMDAwMDAgLyogcmVzZXJ2ZWQsIG11c3QgYmUgc2V0ICovIHxcCisJSFJDV0xfRERSQ00gfFwKKwlIUkNXTF9MQ0xfQlVTX1RPX1NDQl9DTEtfMVgxIHxcCisJSFJDV0xfRERSX1RPX1NDQl9DTEtfMlgxIHxcCisJSFJDV0xfQ1NCX1RPX0NMS0lOXzVYMSB8XAorCUhSQ1dMX0NPUkVfVE9fQ1NCXzJYMSkKKworI2VuZGlmCisKKy8qIDB4YTA2MDZjMDAgKi8KKyNkZWZpbmUgQ0ZHX0hSQ1dfSElHSCAoXAorCUhSQ1dIX1BDSV9IT1NUIHxcCisJSFJDV0hfUENJMV9BUkJJVEVSX0VOQUJMRSB8XAorCUhSQ1dIX0NPUkVfRU5BQkxFIHxcCisJSFJDV0hfRlJPTV8wWDAwMDAwMTAwIHxcCisJSFJDV0hfQk9PVFNFUV9ESVNBQkxFIHxcCisJSFJDV0hfU1dfV0FUQ0hET0dfRElTQUJMRSB8XAorCUhSQ1dIX1JPTV9MT0NfTE9DQUxfMTZCSVQgfFwKKwlIUkNXSF9STF9FWFRfTEVHQUNZIHxcCisJSFJDV0hfVFNFQzFNX0lOX1JHTUlJIHxcCisJSFJDV0hfVFNFQzJNX0lOX1JHTUlJIHxcCisJSFJDV0hfQklHX0VORElBTiB8XAorCUhSQ1dIX0xBTEVfTk9STUFMKQorCisvKiBTeXN0ZW0gSU8gQ29uZmlnICovCisjZGVmaW5lIENGR19TSUNSSAkoU0lDUkhfVFNPQkkxIHwgU0lDUkhfVFNPQkkyKQkvKiBSR01JSSAqLworI2RlZmluZSBDRkdfU0lDUkwJU0lDUkxfVVNCRFIJCQkvKiBFbmFibGUgSW50ZXJuYWwgVVNCIFBoeSAgKi8KKworI2RlZmluZSBDRkdfSElEMF9JTklUCTB4MDAwMDAwMDAwCisjZGVmaW5lIENGR19ISUQwX0ZJTkFMCShISUQwX0VOQUJMRV9NQUNISU5FX0NIRUNLIHwgXAorCQkJIEhJRDBfRU5BQkxFX0RZTkFNSUNfUE9XRVJfTUFOQUdNRU5UKQorCisjZGVmaW5lIENGR19ISUQyIEhJRDJfSEJFCisKKy8qIEREUiBAIDB4MDAwMDAwMDAgKi8KKyNkZWZpbmUgQ0ZHX0lCQVQwTAkoQ0ZHX1NEUkFNX0JBU0UgfCBCQVRMX1BQXzEwKQorI2RlZmluZSBDRkdfSUJBVDBVCShDRkdfU0RSQU1fQkFTRSB8IEJBVFVfQkxfMjU2TSB8IEJBVFVfVlMgfCBCQVRVX1ZQKQorCisvKiBQQ0kgQCAweDgwMDAwMDAwICovCisjZGVmaW5lIENGR19JQkFUMUwJKENGR19QQ0kxX01FTV9CQVNFIHwgQkFUTF9QUF8xMCkKKyNkZWZpbmUgQ0ZHX0lCQVQxVQkoQ0ZHX1BDSTFfTUVNX0JBU0UgfCBCQVRVX0JMXzI1Nk0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKKyNkZWZpbmUgQ0ZHX0lCQVQyTAkoQ0ZHX1BDSTFfTU1JT19CQVNFIHwgQkFUTF9QUF8xMCB8IEJBVExfQ0FDSEVJTkhJQklUIHwgQkFUTF9HVUFSREVEU1RPUkFHRSkKKyNkZWZpbmUgQ0ZHX0lCQVQyVQkoQ0ZHX1BDSTFfTU1JT19CQVNFIHwgQkFUVV9CTF8yNTZNIHwgQkFUVV9WUyB8IEJBVFVfVlApCisKKy8qIFBDSTIgbm90IHN1cHBvcnRlZCBvbiA4MzEzICovCisjZGVmaW5lIENGR19JQkFUM0wJKDApCisjZGVmaW5lIENGR19JQkFUM1UJKDApCisjZGVmaW5lIENGR19JQkFUNEwJKDApCisjZGVmaW5lIENGR19JQkFUNFUJKDApCisKKy8qIElNTVJCQVIgQCAweEUwMDAwMDAwLCBQQ0kgSU8gQCAweEUyMDAwMDAwICYgQkNTUiBAIDB4RTI0MDAwMDAgKi8KKyNkZWZpbmUgQ0ZHX0lCQVQ1TAkoQ0ZHX0lNTVIgfCBCQVRMX1BQXzEwIHwgQkFUTF9DQUNIRUlOSElCSVQgfCBCQVRMX0dVQVJERURTVE9SQUdFKQorI2RlZmluZSBDRkdfSUJBVDVVCShDRkdfSU1NUiB8IEJBVFVfQkxfMjU2TSB8IEJBVFVfVlMgfCBCQVRVX1ZQKQorCisvKiBTRFJBTSBAIDB4RjAwMDAwMDAsIHN0YWNrIGluIERDQUNIRSAweEZERjAwMDAwICYgRkxBU0ggQCAweEZFMDAwMDAwICovCisjZGVmaW5lIENGR19JQkFUNkwJKDB4RjAwMDAwMDAgfCBCQVRMX1BQXzEwKQorI2RlZmluZSBDRkdfSUJBVDZVCSgweEYwMDAwMDAwIHwgQkFUVV9CTF8yNTZNIHwgQkFUVV9WUyB8IEJBVFVfVlApCisKKyNkZWZpbmUgQ0ZHX0lCQVQ3TAkoMCkKKyNkZWZpbmUgQ0ZHX0lCQVQ3VQkoMCkKKworI2RlZmluZSBDRkdfREJBVDBMCUNGR19JQkFUMEwKKyNkZWZpbmUgQ0ZHX0RCQVQwVQlDRkdfSUJBVDBVCisjZGVmaW5lIENGR19EQkFUMUwJQ0ZHX0lCQVQxTAorI2RlZmluZSBDRkdfREJBVDFVCUNGR19JQkFUMVUKKyNkZWZpbmUgQ0ZHX0RCQVQyTAlDRkdfSUJBVDJMCisjZGVmaW5lIENGR19EQkFUMlUJQ0ZHX0lCQVQyVQorI2RlZmluZSBDRkdfREJBVDNMCUNGR19JQkFUM0wKKyNkZWZpbmUgQ0ZHX0RCQVQzVQlDRkdfSUJBVDNVCisjZGVmaW5lIENGR19EQkFUNEwJQ0ZHX0lCQVQ0TAorI2RlZmluZSBDRkdfREJBVDRVCUNGR19JQkFUNFUKKyNkZWZpbmUgQ0ZHX0RCQVQ1TAlDRkdfSUJBVDVMCisjZGVmaW5lIENGR19EQkFUNVUJQ0ZHX0lCQVQ1VQorI2RlZmluZSBDRkdfREJBVDZMCUNGR19JQkFUNkwKKyNkZWZpbmUgQ0ZHX0RCQVQ2VQlDRkdfSUJBVDZVCisjZGVmaW5lIENGR19EQkFUN0wJQ0ZHX0lCQVQ3TAorI2RlZmluZSBDRkdfREJBVDdVCUNGR19JQkFUN1UKKworLyoKKyAqIEludGVybmFsIERlZmluaXRpb25zCisgKgorICogQm9vdCBGbGFncworICovCisjZGVmaW5lIEJPT1RGTEFHX0NPTEQJMHgwMQkvKiBOb3JtYWwgUG93ZXItT246IEJvb3QgZnJvbSBGTEFTSCAqLworI2RlZmluZSBCT09URkxBR19XQVJNCTB4MDIJLyogU29mdHdhcmUgcmVib290ICovCisKKy8qCisgKiBFbnZpcm9ubWVudCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6RTA6MEM6MDA6OTU6MDEKKyNkZWZpbmUgQ09ORklHX0hBU19FVEgxCisjZGVmaW5lIENPTkZJR19FVEgxQUREUgkJMDA6RTA6MEM6MDA6OTU6MDIKKworI2RlZmluZSBDT05GSUdfSVBBRERSCQkxMC4wLjAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTEwLjAuMC4xCisjZGVmaW5lIENPTkZJR19HQVRFV0FZSVAJMTAuMC4wLjEKKyNkZWZpbmUgQ09ORklHX05FVE1BU0sJCTI1NS4wLjAuMAorI2RlZmluZSBDT05GSUdfTkVUREVWCQlldGgxCisKKyNkZWZpbmUgQ09ORklHX0hPU1ROQU1FCQltcGM4MzEzZXJkYgorI2RlZmluZSBDT05GSUdfUk9PVFBBVEgJCS9uZnMvcm9vdC9wYXRoCisjZGVmaW5lIENPTkZJR19CT09URklMRQkJdUltYWdlCisjZGVmaW5lIENPTkZJR19VQk9PVFBBVEgJdS1ib290LmJpbgkvKiBVLUJvb3QgaW1hZ2Ugb24gVEZUUCBzZXJ2ZXIgKi8KKyNkZWZpbmUgQ09ORklHX0ZEVEZJTEUJCW1wYzgzMTNlcmRiLmR0YgorCisjZGVmaW5lIENPTkZJR19MT0FEQUREUgkJMjAwMDAwCS8qIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRmdHAgYW5kIGJvb3RtICovCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJLTEJLyogLTEgZGlzYWJsZXMgYXV0by1ib290ICovCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisKKyNkZWZpbmUgWE1LX1NUUih4KQkjeAorI2RlZmluZSBNS19TVFIoeCkJWE1LX1NUUih4KQorCisjZGVmaW5lIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgXAorCSJuZXRkZXY9IiBNS19TVFIoQ09ORklHX05FVERFVikgIlwwIiAJCQkJXAorCSJldGhwcmltZT1UU0VDMVwwIgkJCQkJCVwKKwkidWJvb3Q9IiBNS19TVFIoQ09ORklHX1VCT09UUEFUSCkgIlwwIiAJCQkJXAorCSJ0ZnRwZmxhc2g9dGZ0cGJvb3QgJGxvYWRhZGRyICR1Ym9vdDsgIiAJCQlcCisJCSJwcm90ZWN0IG9mZiAiIE1LX1NUUihURVhUX0JBU0UpICIgKyRmaWxlc2l6ZTsgIiAJXAorCQkiZXJhc2UgIiBNS19TVFIoVEVYVF9CQVNFKSAiICskZmlsZXNpemU7ICIgCQlcCisJCSJjcC5iICRsb2FkYWRkciAiIE1LX1NUUihURVhUX0JBU0UpICIgJGZpbGVzaXplOyAiIAlcCisJCSJwcm90ZWN0IG9uICIgTUtfU1RSKFRFWFRfQkFTRSkgIiArJGZpbGVzaXplOyAiIAlcCisJCSJjbXAuYiAkbG9hZGFkZHIgIiBNS19TVFIoVEVYVF9CQVNFKSAiICRmaWxlc2l6ZVwwIiAJXAorCSJmZHRhZGRyPTQwMDAwMFwwIgkJCQkJCVwKKwkiZmR0ZmlsZT0iIE1LX1NUUihDT05GSUdfRkRURklMRSkgIlwwIgkJCQlcCisJImNvbnNvbGU9dHR5UzBcMCIJCQkJCQlcCisJInNldGJvb3RhcmdzPXNldGVudiBib290YXJncyAiCQkJCQlcCisJCSJyb290PSRyb290ZGV2IHJ3IGNvbnNvbGU9JGNvbnNvbGUsJGJhdWRyYXRlICRvdGhib290YXJnc1wwIiBcCisJInNldGlwYXJncz1zZXRlbnYgYm9vdGFyZ3MgbmZzcm9vdD0kc2VydmVyaXA6JHJvb3RwYXRoICIgXAorCQkiaXA9JGlwYWRkcjokc2VydmVyaXA6JGdhdGV3YXlpcDokbmV0bWFzazokaG9zdG5hbWU6JG5ldGRldjpvZmYgIiBcCisJCSJyb290PSRyb290ZGV2IHJ3IGNvbnNvbGU9JGNvbnNvbGUsJGJhdWRyYXRlICRvdGhib290YXJnc1wwIgorCisjZGVmaW5lIENPTkZJR19ORlNCT09UQ09NTUFORAkJCQkJCVwKKwkic2V0ZW52IHJvb3RkZXYgL2Rldi9uZnM7IgkJCQkJXAorCSJydW4gc2V0Ym9vdGFyZ3M7IgkJCQkJCQlcCisJInJ1biBzZXRpcGFyZ3M7IgkJCQkJCQlcCisJInRmdHAgJGxvYWRhZGRyICRib290ZmlsZTsiCQkJCQlcCisJInRmdHAgJGZkdGFkZHIgJGZkdGZpbGU7IgkJCQkJXAorCSJib290bSAkbG9hZGFkZHIgLSAkZmR0YWRkciIKKworI2RlZmluZSBDT05GSUdfUkFNQk9PVENPTU1BTkQJCQkJCQlcCisJInNldGVudiByb290ZGV2IC9kZXYvcmFtOyIJCQkJCVwKKwkicnVuIHNldGJvb3RhcmdzOyIJCQkJCQlcCisJInRmdHAgJHJhbWRpc2thZGRyICRyYW1kaXNrZmlsZTsiCQkJCVwKKwkidGZ0cCAkbG9hZGFkZHIgJGJvb3RmaWxlOyIJCQkJCVwKKwkidGZ0cCAkZmR0YWRkciAkZmR0ZmlsZTsiCQkJCQlcCisJImJvb3RtICRsb2FkYWRkciAkcmFtZGlza2FkZHIgJGZkdGFkZHIiCisKKyN1bmRlZiBNS19TVFIKKyN1bmRlZiBYTUtfU1RSCisKKyNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODM0OUlUWC5oIGIvaW5jbHVkZS9jb25maWdzL01QQzgzNDlJVFguaAppbmRleCAzN2JiZmIzLi45MDYzMzllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODM0OUlUWC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4MzQ5SVRYLmgKQEAgLTE1NCw2ICsxNTQsOSBAQAogI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDEwMDAJCS8qIG1lbXRlc3QgcmVnaW9uICovCiAjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgyMDAwCiAKKyNkZWZpbmUgQ0ZHX0REUl9TRFJBTV9DTEtfQ05UTAkoRERSX1NEUkFNX0NMS19DTlRMX1NTX0VOIHwgXAorCQkJCUREUl9TRFJBTV9DTEtfQ05UTF9DTEtfQURKVVNUXzA1KQorCiAjaWZkZWYgQ09ORklHX0hBUkRfSTJDCiAjZGVmaW5lIENPTkZJR19TUERfRUVQUk9NCQkvKiB1c2UgU1BEIEVFUFJPTSBmb3IgRERSIHNldHVwKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1NDBBRFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQwQURTLmgKaW5kZXggNzRhODRmNC4uNWFlZWE1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01QQzg1NDBBRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MEFEUy5oCkBAIC0zMzAsMTMgKzMzMCwxMiBAQAogCiAvKgogICogR2VuZXJhbCBQQ0kKLSAqIEFkZHJlc3NlcyBhcmUgbWFwcGVkIDEtMS4KKyAqIE1lbW9yeSBzcGFjZSBpcyBtYXBwZWQgMS0xLCBidXQgSS9PIHNwYWNlIG11c3Qgc3RhcnQgZnJvbSAwLgogICovCiAjZGVmaW5lIENGR19QQ0kxX01FTV9CQVNFCTB4ODAwMDAwMDAKICNkZWZpbmUgQ0ZHX1BDSTFfTUVNX1BIWVMJQ0ZHX1BDSTFfTUVNX0JBU0UKICNkZWZpbmUgQ0ZHX1BDSTFfTUVNX1NJWkUJMHgyMDAwMDAwMAkvKiA1MTJNICovCi0KLSNkZWZpbmUgQ0ZHX1BDSTFfSU9fQkFTRQkweDAKKyNkZWZpbmUgQ0ZHX1BDSTFfSU9fQkFTRQkweDAwMDAwMDAwCiAjZGVmaW5lIENGR19QQ0kxX0lPX1BIWVMJMHhlMjAwMDAwMAogI2RlZmluZSBDRkdfUENJMV9JT19TSVpFCTB4MTAwMDAwCS8qIDFNICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTQxQ0RTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MUNEUy5oCmluZGV4IGRiMzg5Y2YuLmZiMzYwZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTQxQ0RTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDFDRFMuaApAQCAtMzM0LDcgKzMzNCw3IEBACiAKIC8qCiAgKiBHZW5lcmFsIFBDSQotICogQWRkcmVzc2VzIGFyZSBtYXBwZWQgMS0xLgorICogTWVtb3J5IHNwYWNlIGlzIG1hcHBlZCAxLTEsIGJ1dCBJL08gc3BhY2UgbXVzdCBzdGFydCBmcm9tIDAuCiAgKi8KICNkZWZpbmUgQ0ZHX1BDSTFfTUVNX0JBU0UJMHg4MDAwMDAwMAogI2RlZmluZSBDRkdfUENJMV9NRU1fUEhZUwlDRkdfUENJMV9NRU1fQkFTRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1NDREUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDREUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzQzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0NERTLmgKQEAgLTAsMCArMSw1OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBtcGM4NTQ0ZHMgYm9hcmQgY29uZmlndXJhdGlvbiBmaWxlCisgKgorICovCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyAqLworI2RlZmluZSBDT05GSUdfQk9PS0UJCTEJLyogQk9PS0UgKi8KKyNkZWZpbmUgQ09ORklHX0U1MDAJCTEJLyogQk9PS0UgZTUwMCBmYW1pbHkgKi8KKyNkZWZpbmUgQ09ORklHX01QQzg1eHgJCTEJLyogTVBDODU0MC82MC81NS80MS80OCAqLworI2RlZmluZSBDT05GSUdfTVBDODU0NAkJMQorI2RlZmluZSBDT05GSUdfTVBDODU0NERTCTEKKworI3VuZGVmIENPTkZJR19QQ0kJCQkvKiBFbmFibGUgUENJL1BDSUUgKi8KKyN1bmRlZiBDT05GSUdfUENJMQkJCS8qIFBDSSBjb250cm9sbGVyIDEgKi8KKyN1bmRlZiBDT05GSUdfUENJRTEJCQkvKiBQQ0lFIGNvbnRyb2xlciAxIChzbG90IDEpICovCisjdW5kZWYgQ09ORklHX1BDSUUyCQkJLyogUENJRSBjb250cm9sZXIgMiAoc2xvdCAyKSAqLworI3VuZGVmIENPTkZJR19QQ0lFMwkJCS8qIFBDSUUgY29udHJvbGVyIDMgKFVMSSBicmlkZ2UpICovCisjdW5kZWYgQ09ORklHX0ZTTF9QQ0lfSU5JVAkJLyogVXNlIGNvbW1vbiBGU0wgaW5pdCBjb2RlICovCisKKyNkZWZpbmUgQ09ORklHX1RTRUNfRU5FVCAJCS8qIHRzZWMgZXRoZXJuZXQgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorI2RlZmluZSBDT05GSUdfU1BEX0VFUFJPTQkJLyogVXNlIFNQRCBFRVBST00gZm9yIEREUiBzZXR1cCAqLworI3VuZGVmIENPTkZJR19ERFJfRExMCisjZGVmaW5lIENPTkZJR19ERFJfMlRfVElNSU5HCQkvKiBTZXRzIHRoZSAyVCB0aW1pbmcgYml0ICovCisKKyNkZWZpbmUgQ09ORklHX0REUl9FQ0MJCQkvKiBvbmx5IGZvciBFQ0MgRERSIG1vZHVsZSAqLworI2RlZmluZSBDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIJLyogRERSIGNvbnRyb2xsZXIgb3IgRE1BPyAqLworI2RlZmluZSBDT05GSUdfTUVNX0lOSVRfVkFMVUUJCTB4RGVhZEJlZWYKKworI2RlZmluZSBDT05GSUdfRERSX0VDQ19DTUQKKworLyoKKyAqIFdoZW4gaW5pdGlhbGl6aW5nIGZsYXNoLCBpZiB3ZSBjYW5ub3QgZmluZCB0aGUgbWFudWZhY3R1cmVyIElELAorICogYXNzdW1lIHRoaXMgaXMgdGhlIEFNRCBmbGFzaCBhc3NvY2lhdGVkIHdpdGggdGhlIENEUyBib2FyZC4KKyAqIFRoaXMgYWxsb3dzIGJvb3RpbmcgZnJvbSBhIHByb21qZXQuCisgKi8KKyNkZWZpbmUgQ09ORklHX0FTU1VNRV9BTURfRkxBU0gKKworI2RlZmluZSBNUEM4NXh4X0REUl9TRFJBTV9DTEtfQ05UTAkvKiA4NXh4IGhhcyBjbG9jayBjb250cm9sIHJlZyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2JvYXJkX3N5c19jbGsodW5zaWduZWQgbG9uZyBkdW1teSk7CisjZW5kaWYKKyNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQlnZXRfYm9hcmRfc3lzX2NsaygwKSAvKiBzeXNjbGsgZm9yIE1QQzg1eHggKi8KKworLyoKKyAqIFRoZXNlIGNhbiBiZSB0b2dnbGVkIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcywgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0LgorICovCisjZGVmaW5lIENPTkZJR19MMl9DQUNIRQkJCS8qIHRvZ2dsZSBMMiBjYWNoZSAJKi8KKyNkZWZpbmUgQ09ORklHX0JUQgkJCS8qIHRvZ2dsZSBicmFuY2ggcHJlZGl0aW9uICovCisjZGVmaW5lIENPTkZJR19BRERSX1NUUkVBTUlORwkJLyogdG9nZ2xlIGFkZHIgc3RyZWFtaW5nICovCisjZGVmaW5lIENPTkZJR19DTEVBUl9MQVcwCQkvKiBDbGVhciBMQVcwIGluIGNwdV9pbml0X3IgKi8KKworLyoKKyAqIE9ubHkgcG9zc2libGUgb24gRTUwMCBWZXJzaW9uIDIgb3IgbmV3ZXIgY29yZXMuCisgKi8KKyNkZWZpbmUgQ09ORklHX0VOQUJMRV8zNkJJVF9QSFlTCTEKKworI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GCTEJLyogQ2FsbCBib2FyZF9wcmVfaW5pdCAqLworCisjdW5kZWYJQ0ZHX0RSQU1fVEVTVAkJCS8qIG1lbW9yeSB0ZXN0LCB0YWtlcyB0aW1lICovCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCTB4MDAyMDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MDA0MDAwMDAKKyNkZWZpbmUgQ0ZHX0FMVF9NRU1URVNUCisjZGVmaW5lIENPTkZJR19QQU5JQ19IQU5HIAkvKiBkbyBub3QgcmVzZXQgYm9hcmQgb24gcGFuaWMgKi8KKworLyoKKyAqIEJhc2UgYWRkcmVzc2VzIC0tIE5vdGUgdGhlc2UgYXJlIGVmZmVjdGl2ZSBhZGRyZXNzZXMgd2hlcmUgdGhlCisgKiBhY3R1YWwgcmVzb3VyY2VzIGdldCBtYXBwZWQgKG5vdCBwaHlzaWNhbCBhZGRyZXNzZXMpCisgKi8KKyNkZWZpbmUgQ0ZHX0NDU1JCQVJfREVGQVVMVCAJMHhmZjcwMDAwMAkvKiBDQ1NSQkFSIERlZmF1bHQgKi8KKyNkZWZpbmUgQ0ZHX0NDU1JCQVIJCTB4ZTAwMDAwMDAJLyogcmVsb2NhdGVkIENDU1JCQVIgKi8KKyNkZWZpbmUgQ0ZHX0lNTVIJCUNGR19DQ1NSQkFSCS8qIFBRSUkgdXNlcyBDRkdfSU1NUiAqLworCisjZGVmaW5lIENGR19QQ0kxX0FERFIJCShDRkdfQ0NTUkJBUisweDgwMDApCisjZGVmaW5lIENGR19QQ0lFMV9BRERSCQkoQ0ZHX0NDU1JCQVIrMHhhMDAwKQorI2RlZmluZSBDRkdfUENJRTJfQUREUgkJKENGR19DQ1NSQkFSKzB4OTAwMCkKKyNkZWZpbmUgQ0ZHX1BDSUUzX0FERFIJCShDRkdfQ0NTUkJBUisweGIwMDApCisKKy8qCisgKiBERFIgU2V0dXAKKyAqLworI2RlZmluZSBDRkdfRERSX1NEUkFNX0JBU0UJMHgwMDAwMDAwMAkvKiBERFIgaXMgc3lzdGVtIG1lbW9yeSovCisjZGVmaW5lIENGR19TRFJBTV9CQVNFCQlDRkdfRERSX1NEUkFNX0JBU0UKKworI2RlZmluZSBTUERfRUVQUk9NX0FERFJFU1MJMHg1MQkJLyogRERSIERJTU0gKi8KKworLyoKKyAqIE1ha2Ugc3VyZSByZXF1aXJlZCBvcHRpb25zIGFyZSBzZXQKKyAqLworI2lmbmRlZiBDT05GSUdfU1BEX0VFUFJPTQorI2Vycm9yICgiQ09ORklHX1NQRF9FRVBST00gaXMgcmVxdWlyZWQiKQorI2VuZGlmCisKKyN1bmRlZiBDT05GSUdfQ0xPQ0tTX0lOX01IWgorCisvKgorICogTWVtb3J5IG1hcAorICoKKyAqIDB4MDAwMF8wMDAwCTB4N2ZmZl9mZmZmCUREUgkJCTJHIENhY2hlYWJsZQorICoKKyAqIDB4ODAwMF8wMDAwCTB4YmZmZl9mZmZmCVBDSSBFeHByZXNzIE1lbQkJMUcgbm9uLWNhY2hlYWJsZQorICoKKyAqIDB4YzAwMF8wMDAwCTB4ZGZmZl9mZmZmCVBDSQkJCTUxMk0gbm9uLWNhY2hlYWJsZQorICoKKyAqIDB4ZTAwMF8wMDAwCTB4ZTAwZl9mZmZmCUNDU1IJCQkxTSBub24tY2FjaGVhYmxlCisgKiAweGUxMDBfMDAwMAkweGUzZmZfZmZmZglQQ0kgSU8gcmFuZ2UJCTRNIG5vbi1jYWNoZWFibGUKKyAqCisgKiBMb2NhbGJ1cyBjYWNoZWFibGUKKyAqCisgKiAweGYwMDBfMDAwMAkweGYzZmZfZmZmZglTRFJBTQkJCTY0TSBDYWNoZWFibGUKKyAqIDB4ZjQwMV8wMDAwCTB4ZjQwMV8zZmZmCUwxIGZvciBzdGFjawkJNEsgQ2FjaGVhYmxlIFRMQjAKKyAqCisgKiBMb2NhbGJ1cyBub24tY2FjaGVhYmxlCisgKgorICogMHhmODAwXzAwMDAJMHhmODBmX2ZmZmYJTlZSQU0vQ0FETVVTICgqKQkxTSBub24tY2FjaGVhYmxlCisgKiAweGZmMDBfMDAwMAkweGZmN2ZfZmZmZglGTEFTSCAoMm5kIGJhbmspCThNIG5vbi1jYWNoZWFibGUKKyAqIDB4ZmY4MF8wMDAwCTB4ZmZmZl9mZmZmCUZMQVNIIChib290IGJhbmspCThNIG5vbi1jYWNoZWFibGUKKyAqCisgKi8KKworLyoKKyAqIExvY2FsIEJ1cyBEZWZpbml0aW9ucworICovCisjZGVmaW5lIENGR19CT09UX0JMT0NLCQkweGZjMDAwMDAwCS8qIGJvb3QgVExCICovCisKKyNkZWZpbmUgQ0ZHX0xCQ19DQUNIRV9CQVNFCTB4ZjAwMDAwMDAJLyogTG9jYWxidXMgY2FjaGVhYmxlICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4ZmY4MDAwMDAJLyogc3RhcnQgb2YgRkxBU0ggOE0gKi8KKworI2RlZmluZSBDRkdfQlIwX1BSRUxJTQkJMHhmZjgwMTAwMQorI2RlZmluZSBDRkdfQlIxX1BSRUxJTQkJMHhmZTgwMTAwMQorCisjZGVmaW5lIENGR19PUjBfUFJFTElNCQkweGZmODA2ZTY1CisjZGVmaW5lIENGR19PUjFfUFJFTElNCQkweGZmODA2ZTY1CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJezB4ZmU4MDAwMDAsQ0ZHX0ZMQVNIX0JBU0V9CisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkyCQkvKiBudW1iZXIgb2YgYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTEyOAkJLyogc2VjdG9ycyBwZXIgZGV2aWNlICovCisjdW5kZWYJQ0ZHX0ZMQVNIX0NIRUNLU1VNCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTYwMDAwCQkvKiBGbGFzaCBFcmFzZSBUaW1lb3V0IChtcykgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCQkvKiBGbGFzaCBXcml0ZSBUaW1lb3V0IChtcykgKi8KKworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCVRFWFRfQkFTRQkvKiBzdGFydCBvZiBtb25pdG9yICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQorI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTworCisjZGVmaW5lIENGR19MQkNfTk9OQ0FDSEVfQkFTRQkweGY4MDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0JSMl9QUkVMSU0JCTB4ZjgyMDEwMDEJLyogcG9ydCBzaXplIDE2Yml0ICovCisjZGVmaW5lIENGR19PUjJfUFJFTElNCQkweGZmZjA2ZmY3CS8qIDFNQiBDb21wYWN0IEZsYXNoIGFyZWEqLworCisjZGVmaW5lIENGR19CUjNfUFJFTElNCQkweGY4MTAwODAxCS8qIHBvcnQgc2l6ZSA4Yml0ICovCisjZGVmaW5lIENGR19PUjNfUFJFTElNCQkweGZmZjA2ZmY3CS8qIDFNQiBQSVhJUyBhcmVhKi8KKworI2RlZmluZSBQSVhJU19CQVNFCTB4ZjgxMDAwMDAJLyogUElYSVMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBJWElTX0lECQkweDAJLyogQm9hcmQgSUQgYXQgb2Zmc2V0IDAgKi8KKyNkZWZpbmUgUElYSVNfVkVSCQkweDEJLyogQm9hcmQgdmVyc2lvbiBhdCBvZmZzZXQgMSAqLworI2RlZmluZSBQSVhJU19QVkVSCQkweDIJLyogUElYSVMgRlBHQSB2ZXJzaW9uIGF0IG9mZnNldCAyICovCisjZGVmaW5lIFBJWElTX1JTVAkJMHg0CS8qIFBJWElTIFJlc2V0IENvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElYSVNfQVVYCQkweDYJLyogUElYSVMgQXV4aWxpYXJ5IHJlZ2lzdGVyOyBTY3JhdGNoCisJCQkJCSAqIHJlZ2lzdGVyICovCisjZGVmaW5lIFBJWElTX1NQRAkJMHg3CS8qIFJlZ2lzdGVyIGZvciBTWVNDTEsgc3BlZWQgKi8KKyNkZWZpbmUgUElYSVNfVkNUTAkJMHgxMAkvKiBWRUxBIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElYSVNfVkNGR0VOMAkJMHgxMgkvKiBWRUxBIENvbmZpZyBFbmFibGUgMCAqLworI2RlZmluZSBQSVhJU19WQ0ZHRU4xCQkweDEzCS8qIFZFTEEgQ29uZmlnIEVuYWJsZSAxICovCisjZGVmaW5lIFBJWElTX1ZCT09UCQkweDE2CS8qIFZFTEEgVkJPT1QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElYSVNfVlNQRUVEMAkJMHgxNwkvKiBWRUxBIFZTcGVlZCAwICovCisjZGVmaW5lIFBJWElTX1ZTUEVFRDEJCTB4MTgJLyogVkVMQSBWU3BlZWQgMSAqLworI2RlZmluZSBQSVhJU19WQ0xLSAkJMHgxOQkvKiBWRUxBIFZDTEtIIHJlZ2lzdGVyICovCisjZGVmaW5lIFBJWElTX1ZDTEtMCQkweDFBCS8qIFZFTEEgVkNMS0wgcmVnaXN0ZXIgKi8KKworCisvKiBkZWZpbmUgdG8gdXNlIEwxIGFzIGluaXRpYWwgc3RhY2sgKi8KKyNkZWZpbmUgQ09ORklHX0wxX0lOSVRfUkFNCTEKKyNkZWZpbmUgQ0ZHX0lOSVRfTDFfTE9DSwkxCisjZGVmaW5lIENGR19JTklUX0wxX0FERFIJMHhmNDAxMDAwMAkvKiBJbml0aWFsIEwxIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfTDFfRU5ECQkweDAwMDA0MDAwCS8qIEVuZCBvZiB1c2VkIGFyZWEgaW4gUkFNICovCisKKy8qIGRlZmluZSB0byB1c2UgTDJTUkFNIGFzIGluaXRpYWwgc3RhY2sgKi8KKyN1bmRlZiBDT05GSUdfTDJfSU5JVF9SQU0KKyNkZWZpbmUgQ0ZHX0lOSVRfTDJfQUREUgkweGY4ZmMwMDAwCisjZGVmaW5lIENGR19JTklUX0wyX0VORAkJMHgwMDA0MDAwMAkvKiBFbmQgb2YgdXNlZCBhcmVhIGluIFJBTSAqLworCisjaWZkZWYgQ09ORklHX0wxX0lOSVRfUkFNCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCUNGR19JTklUX0wxX0FERFIKKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAlDRkdfSU5JVF9MMV9FTkQKKyNlbHNlCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCUNGR19JTklUX0wyX0FERFIKKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAlDRkdfSU5JVF9MMl9FTkQKKyNlbmRpZgorCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBudW0gYnl0ZXMgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQKKworI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCSgyNTYgKiAxMDI0KSAvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoMTI4ICogMTAyNCkJLyogUmVzZXJ2ZWQgZm9yIG1hbGxvYyAqLworCisvKiBTZXJpYWwgUG9ydCAtIGNvbnRyb2xsZWQgb24gYm9hcmQgd2l0aCBqdW1wZXIgSjgKKyAqIG9wZW4gLSBpbmRleCAyCisgKiBzaG9ydGVkIC0gaW5kZXggMQorICovCisjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCTEKKyN1bmRlZglDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8KKyNkZWZpbmUgQ0ZHX05TMTY1NTAKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfU0VSSUFMCisjZGVmaW5lIENGR19OUzE2NTUwX1JFR19TSVpFCTEKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ0xLCQlnZXRfYnVzX2ZyZXEoMCkKKworI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJXAorCXszMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLDExNTIwMH0KKworI2RlZmluZSBDRkdfTlMxNjU1MF9DT00xCShDRkdfQ0NTUkJBUisweDQ1MDApCisjZGVmaW5lIENGR19OUzE2NTUwX0NPTTIJKENGR19DQ1NSQkFSKzB4NDYwMCkKKworLyogVXNlIHRoZSBIVVNIIHBhcnNlciAqLworI2RlZmluZSBDRkdfSFVTSF9QQVJTRVIKKyNpZmRlZglDRkdfSFVTSF9QQVJTRVIKKyNkZWZpbmUgQ0ZHX1BST01QVF9IVVNIX1BTMiAiPiAiCisjZW5kaWYKKworLyogcGFzcyBvcGVuIGZpcm13YXJlIGZsYXQgdHJlZSAqLworI2RlZmluZSBDT05GSUdfT0ZfRkxBVF9UUkVFCTEKKyNkZWZpbmUgQ09ORklHX09GX0JPQVJEX1NFVFVQCTEKKworLyogbWF4aW11bSBzaXplIG9mIHRoZSBmbGF0IHRyZWUgKDhLKSAqLworI2RlZmluZSBPRl9GTEFUX1RSRUVfTUFYX1NJWkUJODE5MgorCisjZGVmaW5lIE9GX0NQVQkJCSJQb3dlclBDLDg1NDRAMCIKKyNkZWZpbmUgT0ZfU09DCQkJInNvYzg1NDRAZTAwMDAwMDAiCisjZGVmaW5lIE9GX1RCQ0xLCQkoYmQtPmJpX2J1c2ZyZXEgLyA4KQorI2RlZmluZSBPRl9TVERPVVRfUEFUSAkJIi9zb2M4NTQ0QGUwMDAwMDAwL3NlcmlhbEA0NTAwIgorCisvKiBJMkMgKi8KKyNkZWZpbmUgQ09ORklHX0ZTTF9JMkMJCS8qIFVzZSBGU0wgY29tbW9uIEkyQyBkcml2ZXIgKi8KKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCQkvKiBJMkMgd2l0aCBoYXJkd2FyZSBzdXBwb3J0ICovCisjdW5kZWYJQ09ORklHX1NPRlRfSTJDCQkvKiBJMkMgYml0LWJhbmdlZCAqLworI2RlZmluZSBDRkdfSTJDX1NQRUVECQk0MDAwMDAJLyogSTJDIHNwZWVkIGFuZCBzbGF2ZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFIJMHg1NworI2RlZmluZSBDRkdfSTJDX1NMQVZFCQkweDdGCisjZGVmaW5lIENGR19JMkNfTk9QUk9CRVMJezB4Njl9CS8qIERvbid0IHByb2JlIHRoZXNlIGFkZHJzICovCisjZGVmaW5lIENGR19JMkNfT0ZGU0VUCQkweDMxMDAKKworLyoKKyAqIEdlbmVyYWwgUENJCisgKiBNZW1vcnkgc3BhY2UgaXMgbWFwcGVkIDEtMSwgYnV0IEkvTyBzcGFjZSBtdXN0IHN0YXJ0IGZyb20gMC4KKyAqLworI2RlZmluZSBDRkdfUENJRV9QSFlTCQkweDgwMDAwMDAwCS8qIDFHIFBDSUUgVExCICovCisjZGVmaW5lIENGR19QQ0lfUEhZUwkJMHhjMDAwMDAwMAkvKiA1MTJNIFBDSSBUTEIgKi8KKworI2RlZmluZSBDRkdfUENJMV9NRU1fQkFTRQkweGMwMDAwMDAwCisjZGVmaW5lIENGR19QQ0kxX01FTV9QSFlTCUNGR19QQ0kxX01FTV9CQVNFCisjZGVmaW5lIENGR19QQ0kxX01FTV9TSVpFCTB4MjAwMDAwMDAJLyogNTEyTSAqLworI2RlZmluZSBDRkdfUENJMV9JT19CQVNFCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSTFfSU9fUEhZUwkweGUxMDAwMDAwCisjZGVmaW5lIENGR19QQ0kxX0lPX1NJWkUJMHgwMDEwMDAwMAkvKiAxTSAqLworCisvKiBQQ0kgdmlldyBvZiBTeXN0ZW0gTWVtb3J5ICovCisjZGVmaW5lIENGR19QQ0lfTUVNT1JZX0JVUwkweDAwMDAwMDAwCisjZGVmaW5lIENGR19QQ0lfTUVNT1JZX1BIWVMJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfUENJX01FTU9SWV9TSVpFCTB4ODAwMDAwMDAKKworLyogY29udHJvbGxlciAyLCBTbG90IDEsIHRndGlkIDEsIEJhc2UgYWRkcmVzcyA5MDAwICovCisjZGVmaW5lIENGR19QQ0lFMl9NRU1fQkFTRQkweDgwMDAwMDAwCisjZGVmaW5lIENGR19QQ0lFMl9NRU1fUEhZUwlDRkdfUENJRTJfTUVNX0JBU0UKKyNkZWZpbmUgQ0ZHX1BDSUUyX01FTV9TSVpFCTB4MjAwMDAwMDAJLyogNTEyTSAqLworI2RlZmluZSBDRkdfUENJRTJfSU9fQkFTRQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19QQ0lFMl9JT19QSFlTCTB4ZTIwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSUUyX0lPX1NJWkUJMHgwMDEwMDAwMAkvKiAxTSAqLworCisvKiBjb250cm9sbGVyIDEsIFNsb3QgMix0Z3RpZCAyLCBCYXNlIGFkZHJlc3MgYTAwMCAqLworI2RlZmluZSBDRkdfUENJRTFfTUVNX0JBU0UJMHhhMDAwMDAwMAorI2RlZmluZSBDRkdfUENJRTFfTUVNX1BIWVMJQ0ZHX1BDSUUxX01FTV9CQVNFCisjZGVmaW5lIENGR19QQ0lFMV9NRU1fU0laRQkweDA4MDAwMDAwCS8qIDEyOE0gKi8KKyNkZWZpbmUgQ0ZHX1BDSUUxX01FTV9CQVNFMgkweGE4MDAwMDAwCisjZGVmaW5lIENGR19QQ0lFMV9NRU1fUEhZUzIJQ0ZHX1BDSUUxX01FTV9CQVNFMgorI2RlZmluZSBDRkdfUENJRTFfTUVNX1NJWkUyCTB4MDQwMDAwMDAJLyogNjRNICovCisjZGVmaW5lIENGR19QQ0lFMV9JT19CQVNFCTB4MDAwMDAwMDAJLyogcmV1c2UgbWVtIExBVyAqLworI2RlZmluZSBDRkdfUENJRTFfSU9fUEhZUwkweGFmMDAwMDAwCisjZGVmaW5lIENGR19QQ0lFMV9JT19TSVpFCTB4MDAxMDAwMDAJLyogMU0gKi8KKworLyogY29udHJvbGxlciAzLCBkaXJlY3QgdG8gdWxpLCB0Z3RpZCAzLCBCYXNlIGFkZHJlc3MgYjAwMCAqLworI2RlZmluZSBDRkdfUENJRTNfTUVNX0JBU0UJMHhiMDAwMDAwMAorI2RlZmluZSBDRkdfUENJRTNfTUVNX1BIWVMJQ0ZHX1BDSUUzX01FTV9CQVNFCisjZGVmaW5lIENGR19QQ0lFM19NRU1fU0laRQkweDEwMDAwMDAwCS8qIDI1Nk0gKi8KKyNkZWZpbmUgQ0ZHX1BDSUUzX0lPX0JBU0UJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfUENJRTNfSU9fUEhZUwkweGUzMDAwMDAwCisjZGVmaW5lIENGR19QQ0lFM19JT19TSVpFCTB4MDAxMDAwMDAJLyogMU0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lIENPTkZJR19QQ0lfUE5QCQkJLyogZG8gcGNpIHBsdWctYW5kLXBsYXkgKi8KKworI3VuZGVmIENPTkZJR19FRVBSTzEwMAorI3VuZGVmIENPTkZJR19UVUxJUAorI2RlZmluZSBDT05GSUdfUlRMODEzOQorCisjaWZkZWYgQ09ORklHX1JUTDgxMzkKKy8qIFRoaXMgbWFjcm8gaXMgdXNlZCBieSBSVEw4MTM5IGJ1dCBub3QgZGVmaW5lZCBpbiBQUEMgYXJjaGl0ZWN0dXJlICovCisjZGVmaW5lIEtTRUcxQUREUih4KQkJKHgpCisjZGVmaW5lIF9JT19CQVNFCTB4MDAwMDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19QQ0lfUE5QCisJI2RlZmluZSBQQ0lfRU5FVDBfSU9BRERSCUNGR19QQ0kxX0lPX0JBU0UKKwkjZGVmaW5lIFBDSV9FTkVUMF9NRU1BRERSCUNGR19QQ0kxX0lPX0JBU0UKKwkjZGVmaW5lIFBDSV9JRFNFTF9OVU1CRVIJMHgxMQkvKiBJRFNFTCA9IEFEMTEgKi8KKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19QQ0lfU0NBTl9TSE9XCQkvKiBzaG93IHBjaSBkZXZpY2VzIG9uIHN0YXJ0dXAgKi8KKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KKyNkZWZpbmUgQ09ORklHX1NDU0lfQUhDSQorCisjaWZkZWYgQ09ORklHX1NDU0lfQUhDSQorI2RlZmluZSBDT05GSUdfU0FUQV9VTEk1Mjg4CisjZGVmaW5lIENGR19TQ1NJX01BWF9TQ1NJX0lECTQKKyNkZWZpbmUgQ0ZHX1NDU0lfTUFYX0xVTgkxCisjZGVmaW5lIENGR19TQ1NJX01BWF9ERVZJQ0UgCShDRkdfU0NTSV9NQVhfU0NTSV9JRCAqIENGR19TQ1NJX01BWF9MVU4pCisjZGVmaW5lIENGR19TQ1NJX01BWERFVklDRQlDRkdfU0NTSV9NQVhfREVWSUNFCisjZW5kaWYgLyogU0NTQ0kgKi8KKworI2VuZGlmCS8qIENPTkZJR19QQ0kgKi8KKworCisjaWYgZGVmaW5lZChDT05GSUdfVFNFQ19FTkVUKQorCisjaWZuZGVmIENPTkZJR19ORVRfTVVMVEkKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSSAJMQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgQ09ORklHX01JSV9ERUZBVUxUX1RTRUMJMQkvKiBBbGxvdyB1bnJlZ2lzdGVyZWQgcGh5cyAqLworI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMQkxCisjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMxX05BTUUJImVUU0VDMSIKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzMJMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDM19OQU1FCSJlVFNFQzMiCisjdW5kZWYgQ09ORklHX01QQzg1WFhfRkVDCisKKyNkZWZpbmUgVFNFQzFfUEhZX0FERFIJCTAKKyNkZWZpbmUgVFNFQzNfUEhZX0FERFIJCTEKKworI2RlZmluZSBUU0VDMV9QSFlJRFgJCTAKKyNkZWZpbmUgVFNFQzNfUEhZSURYCQkwCisKKyNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiZVRTRUMxIgorCisjZGVmaW5lIENPTkZJR19QSFlfR0lHRQkJMQkvKiBJbmNsdWRlIEdiRSBzcGVlZC9kdXBsZXggZGV0ZWN0aW9uICovCisKKyNlbmRpZgkvKiBDT05GSUdfVFNFQ19FTkVUICovCisKKy8qCisgKiBFbnZpcm9ubWVudAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorI2lmIENGR19NT05JVE9SX0JBU0UgPiAweGZmZjgwMDAwCisjZGVmaW5lIENGR19FTlZfQUREUgkJMHhmZmY4MDAwMAorI2Vsc2UKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX01PTklUT1JfQkFTRSArIDB4NDAwMDApCisjZW5kaWYKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAKKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHgxMDAwMCAvKiA2NEsgKG9uZSBzZWN0b3IpICovCisKKyNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQkvKiBlY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQgKi8KKyNkZWZpbmUgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCTEJLyogYWxsb3cgYmF1ZHJhdGUgY2hhbmdlICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisjZGVmaW5lCUNPTkZJR19DT01NQU5EUwkoQ09ORklHX0NNRF9ERkwgXAorCQkJCXwgQ0ZHX0NNRF9QQ0kgXAorCQkJCXwgQ0ZHX0NNRF9QSU5HIFwKKwkJCQl8IENGR19DTURfSTJDIFwKKwkJCQl8IENGR19DTURfTUlJIFwKKwkJCQl8IENGR19DTURfQkVEQlVHIFwKKwkJCQl8IENGR19DTURfTkVUKQorI2Vsc2UKKyNkZWZpbmUJQ09ORklHX0NPTU1BTkRTCShDT05GSUdfQ01EX0RGTCBcCisJCQkJfCBDRkdfQ01EX1BJTkcgXAorCQkJCXwgQ0ZHX0NNRF9JMkMgXAorCQkJCXwgQ0ZHX0NNRF9NSUkpCisjZW5kaWYKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI3VuZGVmIENPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkICovCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJKi8KKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkweDIwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkiPT4gIgkJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQlNJWkUJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNlbHNlCisjZGVmaW5lIENGR19DQlNJWkUJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2VuZGlmCisjZGVmaW5lIENGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfSFoJCTEwMDAJCS8qIGRlY3JlbWVudGVyIGZyZXE6IDFtcyB0aWNrcyAqLworCisvKgorICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQorICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmluZSBDRkdfQk9PVE1BUFNaCSg4IDw8IDIwKSAJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCovCisKKy8qIENhY2hlIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQ0ZHX0RDQUNIRV9TSVpFCTMyNzY4CisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRQkzMgorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0hJRlQJNQkvKmxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlKi8KKyNlbmRpZgorCisvKgorICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKKyAqCisgKiBCb290IEZsYWdzCisgKi8KKyNkZWZpbmUgQk9PVEZMQUdfQ09MRAkweDAxCQkvKiBOb3JtYWwgUG93ZXItT246IEJvb3QgZnJvbSBGTEFTSCAqLworI2RlZmluZSBCT09URkxBR19XQVJNCTB4MDIJCS8qIFNvZnR3YXJlIHJlYm9vdCAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMjMwNDAwCS8qIHNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCisjZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkyCS8qIHdoaWNoIHNlcmlhbCBwb3J0IHRvIHVzZSAqLworI2VuZGlmCisKKy8qCisgKiBFbnZpcm9ubWVudCBDb25maWd1cmF0aW9uCisgKi8KKworLyogVGhlIG1hYyBhZGRyZXNzZXMgZm9yIGFsbCBldGhlcm5ldCBpbnRlcmZhY2UgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19UU0VDX0VORVQpCisjZGVmaW5lIENPTkZJR19FVEhBRERSCTAwOkUwOjBDOjAyOjAwOkZECisjZGVmaW5lIENPTkZJR19IQVNfRVRIMQorI2RlZmluZSBDT05GSUdfRVRIMUFERFIJMDA6RTA6MEM6MDI6MDE6RkQKKyNkZWZpbmUgQ09ORklHX0hBU19FVEgyCisjZGVmaW5lIENPTkZJR19FVEgyQUREUgkwMDpFMDowQzowMjowMjpGRAorI2RlZmluZSBDT05GSUdfSEFTX0VUSDMKKyNkZWZpbmUgQ09ORklHX0VUSDNBRERSCTAwOkUwOjBDOjAyOjAzOkZECisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfSVBBRERSCTE5Mi4xNjguMS4yNTEKKworI2RlZmluZSBDT05GSUdfSE9TVE5BTUUJODU0NGRzX3Vua25vd24KKyNkZWZpbmUgQ09ORklHX1JPT1RQQVRICS9uZnMvbXBjODV4eAorI2RlZmluZSBDT05GSUdfQk9PVEZJTEUJODU0NGRzX3RtdC91SW1hZ2UudWJvb3QKKworI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJMTkyLjE2OC4wLjEKKyNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUCAxOTIuMTY4LjAuMQorI2RlZmluZSBDT05GSUdfTkVUTUFTSwkyNTUuMjU1LjAuMAorCisjZGVmaW5lIENPTkZJR19MT0FEQUREUgkxMDAwMDAwCS8qZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGZ0cCBhbmQgYm9vdG0qLworCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkgMTAJLyogLTEgZGlzYWJsZXMgYXV0by1ib290ICovCisjdW5kZWYJQ09ORklHX0JPT1RBUkdTCS8qIHRoZSBib290IGNvbW1hbmQgd2lsbCBzZXQgYm9vdGFyZ3MqLworCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkxMTUyMDAKKworI2lmIGRlZmluZWQoQ09ORklHX1BDSUUxKSB8fCBkZWZpbmVkKENPTkZJR19QQ0lFMikgfHwgZGVmaW5lZChDT05GSUdfUENJRTMpCisjZGVmaW5lIFBDSUVfRU5WIFwKKyAicGNpZXJlZz1tZCAke2F9MDAwIDY7IG1kICR7YX0wMjAgNDsgbWQgJHthfWJmOCAyOyBlY2hvIG87bWQgJHthfWMwMCAyNTsiIFwKKwkiZWNobyBpOyBtZCAke2F9ZGEwIDE1OyBlY2hvIGU7bWQgJHthfWUwMCBlOyBlY2hvIGQ7IG1kICR7YX1mMDAgY1wwIiBcCisgInBjaWUxcmVncz1zZXRlbnYgYSBlMDAwYTsgcnVuIHBjaWVyZWdcMCIJXAorICJwY2llMnJlZ3M9c2V0ZW52IGEgZTAwMDk7IHJ1biBwY2llcmVnXDAiCVwKKyAicGNpZTNyZWdzPXNldGVudiBhIGUwMDBiOyBydW4gcGNpZXJlZ1wwIglcCisgInBjaWVlcnI9bWQgJHthfTAyMCAxOyBtZCAke2F9ZTAwOyIJCVwKKwkicGNpIGQuYiAkYi4wIDcgMTsgcGNpIGQudyAkYi4wIDFlIDE7IglcCisJInBjaSBkLncgJGIuMCA1NiAxOyIJCQlcCisJInBjaSBkICRiLjAgMTA0IDE7cGNpIGQgJGIuMCAxMTAgMTtwY2kgZCAkYi4wIDEzMCAxXDAiIFwKKyAicGNpZWVycmM9bXcgJHthfTAyMCBmZmZmZmZmZjsgbXcgJHthfWUwMCBmZmZmZmZmZjsiCVwKKwkicGNpIHcuYiAkYi4wIDcgZmY7IHBjaSB3LncgJGIuMCAxZSBmZmZmOyBwY2kgdy53ICRiLjAgNTYgZmZmZjsiIFwKKwkicGNpIHcgJGIuMCAxMDQgZmZmZmZmZmY7IHBjaSB3ICRiLjAgMTEwIGZmZmZmZmZmOyIgXAorCSJwY2kgdyAkYi4wIDEzMCBmZmZmZmZmZlwwIiBcCisgInBjaWVjZmc9cGNpIGQgJGIuMCAwIDIwOyBwY2kgZCAkYi4wIDEwMCBlOyBwY2kgZCAkYi4wIDQwMCA2OVwwIglcCisgInBjaWUxZXJyPXNldGVudiBhIGUwMDBhOyBydW4gcGNpZWVyclwwIglcCisgInBjaWUyZXJyPXNldGVudiBhIGUwMDA5OyBydW4gcGNpZWVyclwwIglcCisgInBjaWUzZXJyPXNldGVudiBhIGUwMDBiOyBydW4gcGNpZWVyclwwIglcCisgInBjaWUxZXJyYz1zZXRlbnYgYSBlMDAwYTsgcnVuIHBjaWVlcnJjXDAiCVwKKyAicGNpZTJlcnJjPXNldGVudiBhIGUwMDA5OyBydW4gcGNpZWVycmNcMCIJXAorICJwY2llM2VycmM9c2V0ZW52IGEgZTAwMGI7IHJ1biBwY2llZXJyY1wwIgorI2Vsc2UKKyNkZWZpbmUJUENJRV9FTlYgIiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUENJMSkKKyNkZWZpbmUgUENJX0VOViBcCisgInBjaXJlZz1tZCAke2F9MDAwIDM7IGVjaG8gbzttZCAke2F9YzAwIDI1OyBlY2hvIGk7IG1kICR7YX1kYTAgMTU7IiBcCisJImVjaG8gZTttZCAke2F9ZTAwIDlcMCIgCQlcCisgInBjaTFyZWdzPXNldGVudiBhIGUwMDA4OyBydW4gcGNpcmVnXDAiCVwKKyAicGNpZXJyPW1kICR7YX1lMDAgODsgcGNpIGQuYiAkYi4wIDcgMTsgcGNpIGQudyAkYi4wIDFlIDE7IiBcCisJInBjaSBkLncgJGIuMCA1NiAxXDAiCQkJXAorICJwY2llcnJjPW13ICR7YX1lMDAgZmZmZmZmZmY7IHBjaSB3LmIgJGIuMCA3IGZmOyBwY2kgdy53ICRiLjAgMWUgZmZmZjsiIFwKKwkicGNpIHcudyAkYi4wIDU2IGZmZmZcMCIJCVwKKyAicGNpMWVycj1zZXRlbnYgYSBlMDAwODsgcnVuIHBjaWVyclwwIgkJXAorICJwY2kxZXJyYz1zZXRlbnYgYSBlMDAwODsgcnVuIHBjaWVycmNcMCIKKyNlbHNlCisjZGVmaW5lCVBDSV9FTlYgIiIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVFNFQ19FTkVUKQorI2RlZmluZSBFTkVUX0VOViBcCisgImVuZXRyZWcxPW1kICR7YX0wMDAgMjsgbWQgJHthfTAxMCA5OyBtZCAke2F9MDUwIDQ7IG1kICR7YX0wOGMgMTsiIFwKKwkibWQgJHthfTA5OCAyXDAiIFwKKyAiZW5ldHJlZ3Q9ZWNobyB0O21kICR7YX0xMDAgNjsgbWQgJHthfTE0MCAyOyBtZCAke2F9MTgwIDEwOyBtZCAke2F9MjAwIDEwXDAiIFwKKyAiZW5ldHJlZ3I9ZWNobyByO21kICR7YX0zMDAgNjsgbWQgJHthfTMzMCA1OyBtZCAke2F9MzgwIDEwOyBtZCAke2F9NDAwIDEwXDAiIFwKKyAiZW5ldHJlZ209ZWNobyBtYWM7bWQgJHthfTUwMCA1OyBtZCAke2F9NTIwIDI4O2VjaG8gZmlmbzttZCAke2F9YTAwIDE7IiBcCisJImVjaG8gbWliO21kICR7YX02ODAgMzFcMCIgXAorICJlbmV0cmVnPXJ1biBlbmV0cmVnMTsgcnVuIGVuZXRyZWdtOyBydW4gZW5ldHJlZ3Q7IHJ1biBlbmV0cmVnclwwIiBcCisgImVuZXQxcmVncz1zZXRlbnYgYSBlMDAyNDsgcnVuIGVuZXRyZWdcMCIgXAorICJlbmV0M3JlZ3M9c2V0ZW52IGEgZTAwMjY7IHJ1biBlbmV0cmVnXDAiCisjZWxzZQorI2RlZmluZSBFTkVUX0VOViAiIgorI2VuZGlmCisKKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJXAorICJuZXRkZXY9ZXRoMFwwIgkJCQlcCisgImNvbnNvbGVkZXY9dHR5UzBcMCIJCQkJXAorICJyYW1kaXNrYWRkcj0yMDAwMDAwXDAiCQkJXAorICJyYW1kaXNrZmlsZT04NTQ0ZHNfdG10L3JhbWRpc2sudWJvb3RcMCIJXAorICJmZHRhZGRyPTQwMDAwMFwwIgkJCQlcCisgImZkdGZpbGU9ODU0NGRzX3RtdC9tcGM4NTQ0ZHMuZHRiXDAiCQlcCisgImVvaT1tdyBlMDA0MDBiMCAwXDAiIAkJCQlcCisgImlhY2s9bWQgZTAwNDAwYTAgMVwwIiAJCQlcCisgImRkcnJlZz1tZCAke2F9MDAwIDg7IG1kICR7YX0wODAgODttZCAke2F9MTAwIGQ7IG1kICR7YX0xNDAgNDsgbWQgJHthfWJmMCA0OyIgXAorCSJtZCAke2F9ZTAwIDM7IG1kICR7YX1lMjAgMzsgbWQgJHthfWU0MCA3OyBtZCAke2F9ZjAwIDVcMCIgXAorICJkZHJyZWdzPXNldGVudiBhIGUwMDAyOyBydW4gZGRycmVnXDAiIAlcCisgImd1cmVnPW1kICR7YX0wMDAgMmM7IG1kICR7YX0wYjAgMTsgbWQgJHthfTBjMCAxOyBtZCAke2F9YjIwIDM7IiBcCisJIm1kICR7YX1lMDAgMTsgbWQgJHthfWU2MCAxOyBtZCAke2F9ZWYwIDE1XDAiIAlcCisgImd1cmVncz1zZXRlbnYgYSBlMDBlMDsgcnVuIGd1cmVnXDAiIAkJXAorICJlY21yZWc9bWQgJHthfTAwMCAxOyBtZCAke2F9MDEwIDE7IG1kICR7YX1iZjggMjsgbWQgJHthfWUwMCA2XDAiIFwKKyAiZWNtcmVncz1zZXRlbnYgYSBlMDAwMTsgcnVuIGVjbXJlZ1wwIiAJXAorIFBDSUVfRU5WIAlcCisgUENJX0VOViAJXAorIEVORVRfRU5WCisKKworI2RlZmluZSBDT05GSUdfTkZTQk9PVENPTU1BTkQJCVwKKyAic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgIglcCisgIm5mc3Jvb3Q9JHNlcnZlcmlwOiRyb290cGF0aCAiCQlcCisgImlwPSRpcGFkZHI6JHNlcnZlcmlwOiRnYXRld2F5aXA6JG5ldG1hc2s6JGhvc3RuYW1lOiRuZXRkZXY6b2ZmICIgXAorICJjb25zb2xlPSRjb25zb2xlZGV2LCRiYXVkcmF0ZSAkb3RoYm9vdGFyZ3M7IglcCisgInRmdHAgJGxvYWRhZGRyICRib290ZmlsZTsiCQlcCisgInRmdHAgJGZkdGFkZHIgJGZkdGZpbGU7IgkJXAorICJib290bSAkbG9hZGFkZHIgLSAkZmR0YWRkciIKKworCisjZGVmaW5lIENPTkZJR19SQU1CT09UQ09NTUFORCAJCVwKKyAic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9yYW0gcncgIglcCisgImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnczsiCVwKKyAidGZ0cCAkcmFtZGlza2FkZHIgJHJhbWRpc2tmaWxlOyIJXAorICJ0ZnRwICRsb2FkYWRkciAkYm9vdGZpbGU7IgkJXAorICJ0ZnRwICRmZHRhZGRyICRmZHRmaWxlOyIJCVwKKyAiYm9vdG0gJGxvYWRhZGRyICRyYW1kaXNrYWRkciAkZmR0YWRkciIKKworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQgCQlcCisgInNldGVudiBib290YXJncyByb290PS9kZXYvc2RhMyBydyAiCVwKKyAiY29uc29sZT0kY29uc29sZWRldiwkYmF1ZHJhdGUgJG90aGJvb3RhcmdzOyIJXAorICJ0ZnRwICRsb2FkYWRkciAkYm9vdGZpbGU7IgkJXAorICJ0ZnRwICRmZHRhZGRyICRmZHRmaWxlOyIJCVwKKyAiYm9vdG0gJGxvYWRhZGRyIC0gJGZkdGFkZHIiCisKKyNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0OENEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDhDRFMuaAppbmRleCA3YzQ4NDlmLi42ODAwMDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0OENEUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQ4Q0RTLmgKQEAgLTM2LDEyICszNiwxMiBAQAogI2RlZmluZSBDT05GSUdfTVBDODU0OAkJMQkvKiBNUEM4NTQ4IHNwZWNpZmljICovCiAjZGVmaW5lIENPTkZJR19NUEM4NTQ4Q0RTCTEJLyogTVBDODU0OENEUyBib2FyZCBzcGVjaWZpYyAqLwogCi0jdW5kZWYgQ09ORklHX1BDSQorI2RlZmluZSBDT05GSUdfUENJCiAjZGVmaW5lIENPTkZJR19UU0VDX0VORVQgCQkvKiB0c2VjIGV0aGVybmV0IHN1cHBvcnQgKi8KICNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKICNkZWZpbmUgQ09ORklHX1NQRF9FRVBST00JCS8qIFVzZSBTUEQgRUVQUk9NIGZvciBERFIgc2V0dXAqLwogI2RlZmluZSBDT05GSUdfRERSX0RMTAkJCS8qIHBvc3NpYmxlIERMTCBmaXggbmVlZGVkICovCi0jZGVmaW5lIENPTkZJR19ERFJfMlRfVElNSU5HCQkvKiBTZXRzIHRoZSAyVCB0aW1pbmcgYml0ICovCisjdW5kZWYgQ09ORklHX0REUl8yVF9USU1JTkcJCS8qIFNldHMgdGhlIDJUIHRpbWluZyBiaXQgKi8KIAogI2RlZmluZSBDT05GSUdfRERSX0VDQwkJCS8qIG9ubHkgZm9yIEVDQyBERFIgbW9kdWxlICovCiAjZGVmaW5lIENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUgkvKiBERFIgY29udHJvbGxlciBvciBETUE/ICovCkBAIC0zNDAsMjIgKzM0MCwzNCBAQAogCiAvKgogICogR2VuZXJhbCBQQ0kKLSAqIEFkZHJlc3NlcyBhcmUgbWFwcGVkIDEtMS4KKyAqIE1lbW9yeSBzcGFjZSBpcyBtYXBwZWQgMS0xLCBidXQgSS9PIHNwYWNlIG11c3Qgc3RhcnQgZnJvbSAwLgogICovCiAjZGVmaW5lIENGR19QQ0kxX01FTV9CQVNFCTB4ODAwMDAwMDAKICNkZWZpbmUgQ0ZHX1BDSTFfTUVNX1BIWVMJQ0ZHX1BDSTFfTUVNX0JBU0UKLSNkZWZpbmUgQ0ZHX1BDSTFfTUVNX1NJWkUJMHgyMDAwMDAwMAkvKiA1MTJNICovCisjZGVmaW5lIENGR19QQ0kxX01FTV9TSVpFCTB4MTAwMDAwMDAJLyogMjU2TSAqLwogI2RlZmluZSBDRkdfUENJMV9JT19CQVNFCTB4MDAwMDAwMDAKICNkZWZpbmUgQ0ZHX1BDSTFfSU9fUEhZUwkweGUyMDAwMDAwCi0jZGVmaW5lIENGR19QQ0kxX0lPX1NJWkUJMHgwMDEwMDAwMAkvKiAxTSAqLworI2RlZmluZSBDRkdfUENJMV9JT19TSVpFCTB4MDA4MDAwMDAJLyogOE0gKi8KIAotI2RlZmluZSBDRkdfUENJMl9NRU1fQkFTRQkweGEwMDAwMDAwCisjZGVmaW5lIENGR19QQ0kyX01FTV9CQVNFCTB4OTAwMDAwMDAKICNkZWZpbmUgQ0ZHX1BDSTJfTUVNX1BIWVMJQ0ZHX1BDSTJfTUVNX0JBU0UKLSNkZWZpbmUgQ0ZHX1BDSTJfTUVNX1NJWkUJMHgyMDAwMDAwMAkvKiA1MTJNICovCisjZGVmaW5lIENGR19QQ0kyX01FTV9TSVpFCTB4MTAwMDAwMDAJLyogMjU2TSAqLwogI2RlZmluZSBDRkdfUENJMl9JT19CQVNFCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ0ZHX1BDSTJfSU9fUEhZUwkweGUyMTAwMDAwCi0jZGVmaW5lIENGR19QQ0kyX0lPX1NJWkUJMHgwMDEwMDAwMAkvKiAxTSAqLworI2RlZmluZSBDRkdfUENJMl9JT19QSFlTCTB4ZTI4MDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSTJfSU9fU0laRQkweDAwODAwMDAwCS8qIDhNICovCiAKKyNkZWZpbmUgQ0ZHX1BFWF9NRU1fQkFTRQkweGEwMDAwMDAwCisjZGVmaW5lIENGR19QRVhfTUVNX1BIWVMJQ0ZHX1BFWF9NRU1fQkFTRQorI2RlZmluZSBDRkdfUEVYX01FTV9TSVpFCTB4MjAwMDAwMDAJLyogNTEyTSAqLworI2RlZmluZSBDRkdfUEVYX0lPX0JBU0UJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BFWF9JT19QSFlTCQkweGUzMDAwMDAwCisjZGVmaW5lIENGR19QRVhfSU9fU0laRQkJMHgwMTAwMDAwMAkvKiAxNk0gKi8KKworLyoKKyAqIFJhcGlkSU8gTU1VCisgKi8KKyNkZWZpbmUgQ0ZHX1JJT19NRU1fQkFTRQkweEMwMDAwMDAwCisjZGVmaW5lIENGR19SSU9fTUVNX1NJWkUJMHgyMDAwMDAwMAkvKiA1MTJNICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTYwQURTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2MEFEUy5oCmluZGV4IDgzNWJmNWMuLjIxZTY2MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTYwQURTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NjBBRFMuaApAQCAtMzIwLDE0ICszMjAsMTQgQEAKIAogLyoKICAqIEdlbmVyYWwgUENJCi0gKiBBZGRyZXNzZXMgYXJlIG1hcHBlZCAxLTEuCisgKiBNZW1vcnkgc3BhY2UgaXMgbWFwcGVkIDEtMSwgYnV0IEkvTyBzcGFjZSBtdXN0IHN0YXJ0IGZyb20gMC4KICAqLwogI2RlZmluZSBDRkdfUENJMV9NRU1fQkFTRQkweDgwMDAwMDAwCiAjZGVmaW5lIENGR19QQ0kxX01FTV9QSFlTCUNGR19QQ0kxX01FTV9CQVNFCiAjZGVmaW5lIENGR19QQ0kxX01FTV9TSVpFCTB4MjAwMDAwMDAJLyogNTEyTSAqLwotI2RlZmluZSBDRkdfUENJMV9JT19CQVNFCTB4ZTIwMDAwMDAKLSNkZWZpbmUgQ0ZHX1BDSTFfSU9fUEhZUwlDRkdfUENJMV9JT19CQVNFCi0jZGVmaW5lIENGR19QQ0kxX0lPX1NJWkUJMHgxMDAwMDAwCS8qIDE2TSAqLworI2RlZmluZSBDRkdfUENJMV9JT19CQVNFCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSTFfSU9fUEhZUwkweGUyMDAwMDAwCisjZGVmaW5lIENGR19QQ0kxX0lPX1NJWkUJMHgxMDAwMDAJLyogMU0gKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1NjhNRFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTY4TURTLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2NTY0NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTY4TURTLmgKQEAgLTAsMCArMSw1MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBtcGM4NTY4bWRzIGJvYXJkIGNvbmZpZ3VyYXRpb24gZmlsZQorICovCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyAqLworI2RlZmluZSBDT05GSUdfQk9PS0UJCTEJLyogQk9PS0UgKi8KKyNkZWZpbmUgQ09ORklHX0U1MDAJCQkxCS8qIEJPT0tFIGU1MDAgZmFtaWx5ICovCisjZGVmaW5lIENPTkZJR19NUEM4NXh4CQkxCS8qIE1QQzg1NDAvNjAvNTUvNDEvNDgvNjggKi8KKyNkZWZpbmUgQ09ORklHX01QQzg1NjgJCTEJLyogTVBDODU2OCBzcGVjaWZpYyAqLworI2RlZmluZSBDT05GSUdfTVBDODU2OE1EUwkxCS8qIE1QQzg1NjhNRFMgYm9hcmQgc3BlY2lmaWMgKi8KKworI3VuZGVmIENPTkZJR19QQ0kKKyNkZWZpbmUgQ09ORklHX1RTRUNfRU5FVCAJCS8qIHRzZWMgZXRoZXJuZXQgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorI2RlZmluZSBDT05GSUdfU1BEX0VFUFJPTQkJLyogVXNlIFNQRCBFRVBST00gZm9yIEREUiBzZXR1cCovCisjZGVmaW5lIENPTkZJR19ERFJfRExMCQkJLyogcG9zc2libGUgRExMIGZpeCBuZWVkZWQgKi8KKy8qI2RlZmluZSBDT05GSUdfRERSXzJUX1RJTUlORwkJIFNldHMgdGhlIDJUIHRpbWluZyBiaXQgKi8KKworLyojZGVmaW5lIENPTkZJR19ERFJfRUNDKi8JCQkvKiBvbmx5IGZvciBFQ0MgRERSIG1vZHVsZSAqLworLyojZGVmaW5lIENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUiovCS8qIAkgRERSIGNvbnRyb2xsZXIgb3IgRE1BPyAqLworI2RlZmluZSBDT05GSUdfTUVNX0lOSVRfVkFMVUUJCTB4RGVhZEJlZWYKKworCisvKgorICogV2hlbiBpbml0aWFsaXppbmcgZmxhc2gsIGlmIHdlIGNhbm5vdCBmaW5kIHRoZSBtYW51ZmFjdHVyZXIgSUQsCisgKiBhc3N1bWUgdGhpcyBpcyB0aGUgQU1EIGZsYXNoIGFzc29jaWF0ZWQgd2l0aCB0aGUgTURTIGJvYXJkLgorICogVGhpcyBhbGxvd3MgYm9vdGluZyBmcm9tIGEgcHJvbWpldC4KKyAqLworI2RlZmluZSBDT05GSUdfQVNTVU1FX0FNRF9GTEFTSAorCisjZGVmaW5lIE1QQzg1eHhfRERSX1NEUkFNX0NMS19DTlRMCS8qIDg1eHggaGFzIGNsb2NrIGNvbnRyb2wgcmVnICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfY2xvY2tfZnJlcSh2b2lkKTsKKyNlbmRpZgkJCQkJCSAgLypSZXBsYWNlIGEgY2FsbCB0byBnZXRfY2xvY2tfZnJlcSAoYWZ0ZXIgaXQgaXMgaW1wbGVtZW50ZWQpKi8KKyNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQk2NjAwMDAwMCAvKlRPRE86IHJlc3RvcmUgaWYgd2FudGluZyB0byByZWFkIGZyb20gQkNTUjogZ2V0X2Nsb2NrX2ZyZXEoKSovIC8qIHN5c2NsayBmb3IgTVBDODV4eCAqLworCisvKgorICogVGhlc2UgY2FuIGJlIHRvZ2dsZWQgZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBvdGhlcndpc2UgdXNlIGRlZmF1bHQuCisgKi8KKy8qI2RlZmluZSBDT05GSUdfTDJfQ0FDSEUqLwkJICAgIAkgICAgLyogdG9nZ2xlIEwyIGNhY2hlIAkqLworI2RlZmluZSBDT05GSUdfQlRCCQkJCQkJLyogdG9nZ2xlIGJyYW5jaCBwcmVkaXRpb24gKi8KKyNkZWZpbmUgQ09ORklHX0FERFJfU1RSRUFNSU5HCQkgICAgLyogdG9nZ2xlIGFkZHIgc3RyZWFtaW5nICAgKi8KKworLyoKKyAqIE9ubHkgcG9zc2libGUgb24gRTUwMCBWZXJzaW9uIDIgb3IgbmV3ZXIgY29yZXMuCisgKi8KKyNkZWZpbmUgQ09ORklHX0VOQUJMRV8zNkJJVF9QSFlTCTEKKworCisjZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX0YJMQkvKiBDYWxsIGJvYXJkX3ByZV9pbml0ICovCisKKyN1bmRlZglDRkdfRFJBTV9URVNUCQkJLyogbWVtb3J5IHRlc3QsIHRha2VzIHRpbWUgKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDIwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgwMDQwMDAwMAorCisvKgorICogQmFzZSBhZGRyZXNzZXMgLS0gTm90ZSB0aGVzZSBhcmUgZWZmZWN0aXZlIGFkZHJlc3NlcyB3aGVyZSB0aGUKKyAqIGFjdHVhbCByZXNvdXJjZXMgZ2V0IG1hcHBlZCAobm90IHBoeXNpY2FsIGFkZHJlc3NlcykKKyAqLworI2RlZmluZSBDRkdfQ0NTUkJBUl9ERUZBVUxUIAkweGZmNzAwMDAwCS8qIENDU1JCQVIgRGVmYXVsdCAqLworI2RlZmluZSBDRkdfQ0NTUkJBUgkJMHhlMDAwMDAwMAkvKiByZWxvY2F0ZWQgQ0NTUkJBUiAqLworI2RlZmluZSBDRkdfSU1NUgkJQ0ZHX0NDU1JCQVIJLyogUFFJSSB1c2VzIENGR19JTU1SICovCisKKy8qCisgKiBERFIgU2V0dXAKKyAqLworI2RlZmluZSBDRkdfRERSX1NEUkFNX0JBU0UJMHgwMDAwMDAwMAkvKiBERFIgaXMgc3lzdGVtIG1lbW9yeSovCisjZGVmaW5lIENGR19TRFJBTV9CQVNFCQlDRkdfRERSX1NEUkFNX0JBU0UKKworI2RlZmluZSBTUERfRUVQUk9NX0FERFJFU1MJMHg1MQkJLyogRERSIERJTU0gKi8KKworLyoKKyAqIE1ha2Ugc3VyZSByZXF1aXJlZCBvcHRpb25zIGFyZSBzZXQKKyAqLworI2lmbmRlZiBDT05GSUdfU1BEX0VFUFJPTQorI2Vycm9yICgiQ09ORklHX1NQRF9FRVBST00gaXMgcmVxdWlyZWQiKQorI2VuZGlmCisKKyN1bmRlZiBDT05GSUdfQ0xPQ0tTX0lOX01IWgorCisKKy8qCisgKiBMb2NhbCBCdXMgRGVmaW5pdGlvbnMKKyAqLworCisvKgorICogRkxBU0ggb24gdGhlIExvY2FsIEJ1cworICogVHdvIGJhbmtzLCA4TSBlYWNoLCB1c2luZyB0aGUgQ0ZJIGRyaXZlci4KKyAqIEJvb3QgZnJvbSBCUjAvT1IwIGJhbmsgYXQgMHhmZjAwXzAwMDAKKyAqIEFsdGVybmF0ZSBCUjEvT1IxIGJhbmsgYXQgMHhmZjgwXzAwMDAKKyAqCisgKiBCUjAsIEJSMToKKyAqICAgIEJhc2UgYWRkcmVzcyAwID0gMHhmZjAwXzAwMDAgPSBCUjBbMDoxNl0gPSAxMTExIDExMTEgMDAwMCAwMDAwIDAKKyAqICAgIEJhc2UgYWRkcmVzcyAxID0gMHhmZjgwXzAwMDAgPSBCUjFbMDoxNl0gPSAxMTExIDExMTEgMTAwMCAwMDAwIDAKKyAqICAgIFBvcnQgU2l6ZSA9IDE2IGJpdHMgPSBCUnhbMTk6MjBdID0gMTAKKyAqICAgIFVzZSBHUENNID0gQlJ4WzI0OjI2XSA9IDAwMAorICogICAgVmFsaWQgPSBCUnhbMzFdID0gMQorICoKKyAqIDAgICAgNCAgICA4ICAgIDEyICAgMTYgICAyMCAgIDI0ICAgMjgKKyAqIDExMTEgMTExMSAxMDAwIDAwMDAgMDAwMSAwMDAwIDAwMDAgMDAwMSA9IGZmODAxMDAxICAgIEJSMAorICogMTExMSAxMTExIDAwMDAgMDAwMCAwMDAxIDAwMDAgMDAwMCAwMDAxID0gZmYwMDEwMDEgICAgQlIxCisgKgorICogT1IwLCBPUjE6CisgKiAgICBBZGRyIE1hc2sgPSA4TSA9IE9SeFswOjE2XSA9IDExMTEgMTExMSAxMDAwIDAwMDAgMAorICogICAgUmVzZXJ2ZWQgT1J4WzE3OjE4XSA9IDExLCBjb25mdXNpb24gaGVyZT8KKyAqICAgIENTTlQgPSBPUnhbMjBdID0gMQorICogICAgQUNTID0gaGFsZiBjeWNsZSBkZWxheSA9IE9SeFsyMToyMl0gPSAxMQorICogICAgU0NZID0gNiA9IE9SeFsyNDoyN10gPSAwMTEwCisgKiAgICBUUkxYID0gdXNlIHJlbGF4ZWQgdGltaW5nID0gT1J4WzI5XSA9IDEKKyAqICAgIEVBRCA9IHVzZSBleHRlcm5hbCBhZGRyZXNzIGxhdGNoIGRlbGF5ID0gT1JbMzFdID0gMQorICoKKyAqIDAgICAgNCAgICA4ICAgIDEyICAgMTYgICAyMCAgIDI0ICAgMjgKKyAqIDExMTEgMTExMSAxMDAwIDAwMDAgMDExMCAxMTEwIDAxMTAgMDEwMSA9IGZmODA2ZTY1ICAgIE9SeAorICovCisjZGVmaW5lIENGR19CQ1NSX0JBU0UJCTB4ZjgwMDAwMDAKKworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJMHhmZTAwMDAwMAkvKiBzdGFydCBvZiBGTEFTSCAzMk0gKi8KKworLypDaGlwIHNlbGVjdCAwIC0gRmxhc2gqLworI2RlZmluZSBDRkdfQlIwX1BSRUxJTQkJMHhmZTAwMTAwMQorI2RlZmluZQlDRkdfT1IwX1BSRUxJTQkJMHhmZTAwNmZmNworCisvKkNoaXAgc2xlbGVjdCAxIC0gQkNTUiovCisjZGVmaW5lIENGR19CUjFfUFJFTElNCQkweGY4MDAwODAxCisjZGVmaW5lCUNGR19PUjFfUFJFTElNCQkweGZmZmZlOWY3CisKKy8qI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAl7MHhmZjgwMDAwMCwgQ0ZHX0ZMQVNIX0JBU0V9ICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEJCS8qIG51bWJlciBvZiBiYW5rcyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTUxMgkJLyogc2VjdG9ycyBwZXIgZGV2aWNlICovCisjdW5kZWYJQ0ZHX0ZMQVNIX0NIRUNLU1VNCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTYwMDAwCS8qIEZsYXNoIEVyYXNlIFRpbWVvdXQgKG1zKSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJCS8qIEZsYXNoIFdyaXRlIFRpbWVvdXQgKG1zKSAqLworCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgCVRFWFRfQkFTRQkvKiBzdGFydCBvZiBtb25pdG9yICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQorI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTworCisKKy8qCisgKiBTRFJBTSBvbiB0aGUgTG9jYWxCdXMKKyAqLworI2RlZmluZSBDRkdfTEJDX1NEUkFNX0JBU0UJMHhmMDAwMDAwMAkvKiBMb2NhbGJ1cyBTRFJBTQkgKi8KKyNkZWZpbmUgQ0ZHX0xCQ19TRFJBTV9TSVpFCTY0CQkJLyogTEJDIFNEUkFNIGlzIDY0TUIgKi8KKworCisvKkNoaXAgc2VsZWN0IDIgLSBTRFJBTSovCisjZGVmaW5lIENGR19CUjJfUFJFTElNICAgICAgMHhmMDAwMTg2MQorI2RlZmluZSBDRkdfT1IyX1BSRUxJTQkJMHhmYzAwNjkwMQorCisjZGVmaW5lIENGR19MQkNfTENSUgkJMHgwMDAzMDAwNCAgICAJLyogTEIgY2xvY2sgcmF0aW8gcmVnICovCisjZGVmaW5lIENGR19MQkNfTEJDUgkJMHgwMDAwMDAwMCAgICAJLyogTEIgY29uZmlnIHJlZyAqLworI2RlZmluZSBDRkdfTEJDX0xTUlQJCTB4MjAwMDAwMDAgIAkvKiBMQiBzZHJhbSByZWZyZXNoIHRpbWVyICovCisjZGVmaW5lIENGR19MQkNfTVJUUFIJCTB4MDAwMDAwMDAgIAkvKiBMQiByZWZyZXNoIHRpbWVyIHByZXNjYWwqLworCisvKgorICogTFNETVIgbWFza3MKKyAqLworI2RlZmluZSBDRkdfTEJDX0xTRE1SX1JGRU4JKDEgPDwgKDMxIC0gIDEpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX0JTTUExNTE2CSgzIDw8ICgzMSAtIDEwKSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9CU01BMTYxNwkoNCA8PCAoMzEgLSAxMCkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfUkZDUjE2CSg3IDw8ICgzMSAtIDE2KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9QUkVUT0FDVDcJKDcgPDwgKDMxIC0gMTkpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX0FDVFRPUlc3CSg3IDw8ICgzMSAtIDIyKSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9BQ1RUT1JXNgkoNiA8PCAoMzEgLSAyMikpCisjZGVmaW5lIENGR19MQkNfTFNETVJfQkw4CSgxIDw8ICgzMSAtIDIzKSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9XUkM0CSgwIDw8ICgzMSAtIDI3KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9DTDMJKDMgPDwgKDMxIC0gMzEpKQorCisjZGVmaW5lIENGR19MQkNfTFNETVJfT1BfTk9STUFMCSgwIDw8ICgzMSAtIDQpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX09QX0FSRlJTSAkoMSA8PCAoMzEgLSA0KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9PUF9TUkZSU0gJKDIgPDwgKDMxIC0gNCkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfT1BfTVJXCSgzIDw8ICgzMSAtIDQpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX09QX1BSRUNICSg0IDw8ICgzMSAtIDQpKQorI2RlZmluZSBDRkdfTEJDX0xTRE1SX09QX1BDSEFMTAkoNSA8PCAoMzEgLSA0KSkKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl9PUF9BQ1RCTksJKDYgPDwgKDMxIC0gNCkpCisjZGVmaW5lIENGR19MQkNfTFNETVJfT1BfUldJTlYJKDcgPDwgKDMxIC0gNCkpCisKKy8qCisgKiBDb21tb24gc2V0dGluZ3MgZm9yIGFsbCBMb2NhbCBCdXMgU0RSQU0gY29tbWFuZHMuCisgKiBBdCBydW4gdGltZSwgZWl0aGVyIEJTTUExNTE2IChmb3IgQ1BVIDEuMSkKKyAqICAgICAgICAgICAgICAgICAgb3IgQlNNQTE2MTcgKGZvciBDUFUgMS4wKSAob2xkKQorICogaXMgT1InZWQgaW4gdG9vLgorICovCisjZGVmaW5lIENGR19MQkNfTFNETVJfQ09NTU9OCSggQ0ZHX0xCQ19MU0RNUl9SRkNSMTYJCVwKKwkJCQl8IENGR19MQkNfTFNETVJfUFJFVE9BQ1Q3CVwKKwkJCQl8IENGR19MQkNfTFNETVJfQUNUVE9SVzcJXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9CTDgJCVwKKwkJCQl8IENGR19MQkNfTFNETVJfV1JDNAkJXAorCQkJCXwgQ0ZHX0xCQ19MU0RNUl9DTDMJCVwKKwkJCQl8IENGR19MQkNfTFNETVJfUkZFTgkJXAorCQkJCSkKKworLyoKKyAqIFRoZSBiY3NyIHJlZ2lzdGVycyBhcmUgY29ubmVjdGVkIHRvIENTMyBvbiBNRFMuCisgKiBUaGUgbmV3IG1lbW9yeSBtYXAgcGxhY2VzIGJjc3IgYXQgMHhmODAwMDAwMC4KKyAqCisgKiBGb3IgQlIzLCBuZWVkOgorICogICAgQmFzZSBhZGRyZXNzIG9mIDB4ZjgwMDAwMDAgPSBCUlswOjE2XSA9IDExMTEgMTAwMCAwMDAwIDAwMDAgMAorICogICAgcG9ydC1zaXplID0gOC1iaXRzICA9IEJSWzE5OjIwXSA9IDAxCisgKiAgICBubyBwYXJpdHkgY2hlY2tpbmcgID0gQlJbMjE6MjJdID0gMDAKKyAqICAgIEdQTUMgZm9yIE1TRUwgICAgICAgPSBCUlsyNDoyNl0gPSAwMDAKKyAqICAgIFZhbGlkICAgICAgICAgICAgICAgPSBCUlszMV0gICAgPSAxCisgKgorICogMCAgICA0ICAgIDggICAgMTIgICAxNiAgIDIwICAgMjQgICAyOAorICogMTExMSAxMDAwIDAwMDAgMDAwMCAwMDAwIDEwMDAgMDAwMCAwMDAxID0gZjgwMDA4MDEKKyAqCisgKiBGb3IgT1IzLCBuZWVkOgorICogICAgMSBNQiBtYXNrIGZvciBBTSwgICBPUlswOjE2XSAgPSAxMTExIDExMTEgMTExMSAwMDAwIDAKKyAqICAgIGRpc2FibGUgYnVmZmVyIGN0cmwgT1JbMTldICAgID0gMAorICogICAgQ1NOVCAgICAgICAgICAgICAgICBPUlsyMF0gICAgPSAxCisgKiAgICBBQ1MgICAgICAgICAgICAgICAgIE9SWzIxOjIyXSA9IDExCisgKiAgICBYQUNTICAgICAgICAgICAgICAgIE9SWzIzXSAgICA9IDEKKyAqICAgIFNDWSAxNSB3YWl0IHN0YXRlcyAgT1JbMjQ6MjddID0gMTExMQltYXggaXMgc3Vib3B0aW1hbCBidXQgc2FmZQorICogICAgU0VUQSAgICAgICAgICAgICAgICBPUlsyOF0gICAgPSAwCisgKiAgICBUUkxYICAgICAgICAgICAgICAgIE9SWzI5XSAgICA9IDEKKyAqICAgIEVIVFIgICAgICAgICAgICAgICAgT1JbMzBdICAgID0gMQorICogICAgRUFEIGV4dHJhIHRpbWUgICAgICBPUlszMV0gICAgPSAxCisgKgorICogMCAgICA0ICAgIDggICAgMTIgICAxNiAgIDIwICAgMjQgICAyOAorICogMTExMSAxMTExIDExMTEgMDAwMCAwMDAwIDExMTEgMTExMSAwMTExID0gZmZmMDBmZjcKKyAqLworI2RlZmluZSBDRkdfQkNTUiAoMHhmODAwMDAwMCkKKworLypDaGlwIHNsZWxlY3QgNCAtIFBJQiovCisjZGVmaW5lIENGR19CUjRfUFJFTElNICAgMHhmODAwODgwMQorI2RlZmluZSBDRkdfT1I0X1BSRUxJTSAgIDB4ZmZmZmU5ZjcKKworLypDaGlwIHNlbGVjdCA1IC0gUElCKi8KKyNkZWZpbmUgQ0ZHX0JSNV9QUkVMSU0JIDB4ZjgwMTA4MDEKKyNkZWZpbmUgQ0ZHX09SNV9QUkVMSU0JIDB4ZmZmZjY5ZjcKKworI2RlZmluZSBDT05GSUdfTDFfSU5JVF9SQU0KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0xPQ0sgCTEKKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHhlNDAxMDAwMAkvKiBJbml0aWFsIFJBTSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQgICAgCTB4NDAwMAkgICAgLyogRW5kIG9mIHVzZWQgYXJlYSBpbiBSQU0gKi8KKworI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRSAgCTEyOAkgICAgLyogbnVtIGJ5dGVzIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUCisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCSAgICAJKDI1NiAqIDEwMjQpIC8qIFJlc2VydmUgMjU2IGtCIGZvciBNb24gKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JICAgIAkoMTI4ICogMTAyNCkJLyogUmVzZXJ2ZWQgZm9yIG1hbGxvYyAqLworCisvKiBTZXJpYWwgUG9ydCAqLworI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkJMQorI3VuZGVmCUNPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTworI2RlZmluZSBDRkdfTlMxNjU1MAorI2RlZmluZSBDRkdfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUgICAgMQorI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsJCWdldF9idXNfZnJlcSgwKQorCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgXAorCXszMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLDExNTIwMH0KKworI2RlZmluZSBDRkdfTlMxNjU1MF9DT00xICAgICAgICAoQ0ZHX0NDU1JCQVIrMHg0NTAwKQorI2RlZmluZSBDRkdfTlMxNjU1MF9DT00yICAgICAgICAoQ0ZHX0NDU1JCQVIrMHg0NjAwKQorCisvKiBVc2UgdGhlIEhVU0ggcGFyc2VyKi8KKyNkZWZpbmUgQ0ZHX0hVU0hfUEFSU0VSCisjaWZkZWYgIENGR19IVVNIX1BBUlNFUgorI2RlZmluZSBDRkdfUFJPTVBUX0hVU0hfUFMyICI+ICIKKyNlbmRpZgorCisvKiBwYXNzIG9wZW4gZmlybXdhcmUgZmxhdCB0cmVlICovCisjZGVmaW5lIENPTkZJR19PRl9GTEFUX1RSRUUJMQorI2RlZmluZSBDT05GSUdfT0ZfQk9BUkRfU0VUVVAJMQorCisvKiBtYXhpbXVtIHNpemUgb2YgdGhlIGZsYXQgdHJlZSAoOEspICovCisjZGVmaW5lIE9GX0ZMQVRfVFJFRV9NQVhfU0laRQk4MTkyCisKKyNkZWZpbmUgT0ZfQ1BVCQkJIlBvd2VyUEMsODU2OEAwIgorI2RlZmluZSBPRl9TT0MJCQkic29jODU2OEBlMDAwMDAwMCIKKyNkZWZpbmUgT0ZfVEJDTEsJCShiZC0+YmlfYnVzZnJlcSAvIDgpCisjZGVmaW5lIE9GX1NURE9VVF9QQVRICQkiL3NvYzg1NjhAZTAwMDAwMDAvc2VyaWFsQDQ2MDAiCisKKy8qCisgKiBJMkMKKyAqLworI2RlZmluZSBDT05GSUdfRlNMX0kyQwkJLyogVXNlIEZTTCBjb21tb24gSTJDIGRyaXZlciAqLworI2RlZmluZSBDT05GSUdfSEFSRF9JMkMJCS8qIEkyQyB3aXRoIGhhcmR3YXJlIHN1cHBvcnQqLworI3VuZGVmCUNPTkZJR19TT0ZUX0kyQwkJCS8qIEkyQyBiaXQtYmFuZ2VkICovCisjZGVmaW5lIENGR19JMkNfU1BFRUQJCTQwMDAwMAkvKiBJMkMgc3BlZWQgYW5kIHNsYXZlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUgkweDU3CisjZGVmaW5lIENGR19JMkNfU0xBVkUJCTB4N0YKKyNkZWZpbmUgQ0ZHX0kyQ19OT1BST0JFUyAgICAgICAgezB4Njl9CS8qIERvbid0IHByb2JlIHRoZXNlIGFkZHJzICovCisjZGVmaW5lIENGR19JMkNfT0ZGU0VUCQkweDMwMDAKKworLyoKKyAqIEdlbmVyYWwgUENJCisgKiBNZW1vcnkgQWRkcmVzc2VzIGFyZSBtYXBwZWQgMS0xLiBJL08gaXMgbWFwcGVkIGZyb20gMAorICovCisjZGVmaW5lIENGR19QQ0kxX01FTV9CQVNFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSTFfTUVNX1BIWVMJQ0ZHX1BDSTFfTUVNX0JBU0UKKyNkZWZpbmUgQ0ZHX1BDSTFfTUVNX1NJWkUJMHgxMDAwMDAwMAkvKiAyNTZNICovCisjZGVmaW5lIENGR19QQ0kxX0lPX0JBU0UJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfUENJMV9JT19QSFlTCTB4ZTIwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSTFfSU9fU0laRQkweDAwODAwMDAwCS8qIDhNICovCisKKyNkZWZpbmUgQ0ZHX1BFWF9NRU1fQkFTRQkweGEwMDAwMDAwCisjZGVmaW5lIENGR19QRVhfTUVNX1BIWVMJQ0ZHX1BFWF9NRU1fQkFTRQorI2RlZmluZSBDRkdfUEVYX01FTV9TSVpFCTB4MTAwMDAwMDAJLyogMjU2TSAqLworI2RlZmluZSBDRkdfUEVYX0lPX0JBU0UJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BFWF9JT19QSFlTCQkweGUyODAwMDAwCisjZGVmaW5lIENGR19QRVhfSU9fU0laRQkJMHgwMDgwMDAwMAkvKiA4TSAqLworCisjZGVmaW5lIENGR19TUklPX01FTV9CQVNFCTB4YzAwMDAwMDAKKworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lIENPTkZJR19QQ0lfUE5QCSAgICAgICAgICAgICAgIAkvKiBkbyBwY2kgcGx1Zy1hbmQtcGxheSAqLworCisjdW5kZWYgQ09ORklHX0VFUFJPMTAwCisjdW5kZWYgQ09ORklHX1RVTElQCisKKyN1bmRlZiBDT05GSUdfUENJX1NDQU5fU0hPVwkJLyogc2hvdyBwY2kgZGV2aWNlcyBvbiBzdGFydHVwICovCisjZGVmaW5lIENGR19QQ0lfU1VCU1lTX1ZFTkRPUklEIDB4MTA1NyAgLyogTW90b3JvbGEgKi8KKworI2VuZGlmCS8qIENPTkZJR19QQ0kgKi8KKworCisjaWYgZGVmaW5lZChDT05GSUdfVFNFQ19FTkVUKQorCisjaWZuZGVmIENPTkZJR19ORVRfTVVMVEkKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSSAJMQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzEJMQorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMV9OQU1FCSJlVFNFQzAiCisjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMyCTEKKyNkZWZpbmUgQ09ORklHX01QQzg1WFhfVFNFQzJfTkFNRQkiZVRTRUMxIgorI3VuZGVmICBDT05GSUdfTVBDODVYWF9UU0VDMworI3VuZGVmICBDT05GSUdfTVBDODVYWF9UU0VDNAorI3VuZGVmICBDT05GSUdfTVBDODVYWF9GRUMKKworI2RlZmluZSBUU0VDMV9QSFlfQUREUgkJMgorI2RlZmluZSBUU0VDMl9QSFlfQUREUgkJMworCisjZGVmaW5lIFRTRUMxX1BIWUlEWAkJMAorI2RlZmluZSBUU0VDMl9QSFlJRFgJCTAKKworLyogT3B0aW9ucyBhcmU6IGVUU0VDWzAtM10gKi8KKyNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiZVRTRUMwIgorCisjZW5kaWYJLyogQ09ORklHX1RTRUNfRU5FVCAqLworCisvKgorICogRW52aXJvbm1lbnQKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX01PTklUT1JfQkFTRSArIDB4NDAwMDApCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4NDAwMDAJLyogMjU2SyhvbmUgc2VjdG9yKSBmb3IgZW52ICovCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwCisKKyNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQkvKiBlY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQgKi8KKyNkZWZpbmUgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCTEJLyogYWxsb3cgYmF1ZHJhdGUgY2hhbmdlICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKENPTkZJR19DTURfREZMIFwKKwkJCQl8IENGR19DTURfUENJIFwKKwkJCQl8IENGR19DTURfUElORyBcCisJCQkJfCBDRkdfQ01EX0kyQyBcCisJCQkJfCBDRkdfQ01EX01JSSkKKyNlbHNlCisjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKENPTkZJR19DTURfREZMIFwKKwkJCQl8IENGR19DTURfUElORyBcCisJCQkJfCBDRkdfQ01EX0kyQyBcCisJCQkJfCBDRkdfQ01EX01JSSkKKyNlbmRpZgorI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjdW5kZWYgQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQgKi8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDRkdfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkqLworI2RlZmluZSBDRkdfTE9BRF9BRERSCTB4MjAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfUFJPTVBUCSI9PiAiCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ0ZHX0NCU0laRQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2Vsc2UKKyNkZWZpbmUgQ0ZHX0NCU0laRQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2VuZGlmCisjZGVmaW5lIENGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfSFoJCTEwMDAJCS8qIGRlY3JlbWVudGVyIGZyZXE6IDFtcyB0aWNrcyAqLworCisvKgorICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQorICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmluZSBDRkdfQk9PVE1BUFNaCSg4IDw8IDIwKSAJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCovCisKKy8qIENhY2hlIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQ0ZHX0RDQUNIRV9TSVpFCTMyNzY4CisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRQkzMgorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0hJRlQJNQkvKmxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlKi8KKyNlbmRpZgorCisvKgorICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKKyAqCisgKiBCb290IEZsYWdzCisgKi8KKyNkZWZpbmUgQk9PVEZMQUdfQ09MRAkweDAxCQkvKiBOb3JtYWwgUG93ZXItT246IEJvb3QgZnJvbSBGTEFTSCAqLworI2RlZmluZSBCT09URkxBR19XQVJNCTB4MDIJCS8qIFNvZnR3YXJlIHJlYm9vdCAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMjMwNDAwCS8qIHNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCisjZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkyCS8qIHdoaWNoIHNlcmlhbCBwb3J0IHRvIHVzZSAqLworI2VuZGlmCisKKy8qCisgKiBFbnZpcm9ubWVudCBDb25maWd1cmF0aW9uCisgKi8KKworLyogVGhlIG1hYyBhZGRyZXNzZXMgZm9yIGFsbCBldGhlcm5ldCBpbnRlcmZhY2UgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19UU0VDX0VORVQpCisjZGVmaW5lIENPTkZJR19FVEhBRERSICAgMDA6RTA6MEM6MDA6MDA6RkQKKyNkZWZpbmUgQ09ORklHX0hBU19FVEgxCisjZGVmaW5lIENPTkZJR19FVEgxQUREUiAgMDA6RTA6MEM6MDA6MDE6RkQKKyNkZWZpbmUgQ09ORklHX0hBU19FVEgyCisjZGVmaW5lIENPTkZJR19FVEgyQUREUiAgMDA6RTA6MEM6MDA6MDI6RkQKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19JUEFERFIgICAgMTkyLjE2OC4xLjI1MworCisjZGVmaW5lIENPTkZJR19IT1NUTkFNRSAgdW5rbm93bgorI2RlZmluZSBDT05GSUdfUk9PVFBBVEggIC9uZnNyb290CisjZGVmaW5lIENPTkZJR19CT09URklMRSAgeW91ci51SW1hZ2UKKworI2RlZmluZSBDT05GSUdfU0VSVkVSSVAgIDE5Mi4xNjguMS4xCisjZGVmaW5lIENPTkZJR19HQVRFV0FZSVAgMTkyLjE2OC4xLjEKKyNkZWZpbmUgQ09ORklHX05FVE1BU0sgICAyNTUuMjU1LjI1NS4wCisKKyNkZWZpbmUgQ09ORklHX0xPQURBRERSICAyMDAwMDAgICAvKmRlZmF1bHQgbG9jYXRpb24gZm9yIHRmdHAgYW5kIGJvb3RtKi8KKworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZIDEwICAgICAgIC8qIC0xIGRpc2FibGVzIGF1dG8tYm9vdCAqLworI3VuZGVmICBDT05GSUdfQk9PVEFSR1MgICAgICAgICAgIC8qIHRoZSBib290IGNvbW1hbmQgd2lsbCBzZXQgYm9vdGFyZ3MqLworCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkxMTUyMDAKKworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCSAgICAgICAgXAorICAgIm5ldGRldj1ldGgwXDAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgImNvbnNvbGVkZXY9dHR5UzBcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgInJhbWRpc2thZGRyPTYwMDAwMFwwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgInJhbWRpc2tmaWxlPXlvdXIucmFtZGlzay51LWJvb3RcMCIJCQkJCVwKKyAgICJmZHRhZGRyPTQwMDAwMFwwIgkJCQkJCQlcCisgICAiZmR0ZmlsZT15b3VyLmZkdC5kdGJcMCIJCQkJCQlcCisgICAibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQkJCVwKKyAgICAgICJuZnNyb290PSRzZXJ2ZXJpcDokcm9vdHBhdGggIgkJCQkJXAorICAgICAgImlwPSRpcGFkZHI6JHNlcnZlcmlwOiRnYXRld2F5aXA6JG5ldG1hc2s6JGhvc3RuYW1lOiRuZXRkZXY6b2ZmICIgXAorICAgICAgImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnc1wwIgkJCVwKKyAgICJyYW1hcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3ICIJCQkJXAorICAgICAgImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnc1wwIgkJCVwKKworCisjZGVmaW5lIENPTkZJR19ORlNCT09UQ09NTUFORAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgInJ1biBuZnNhcmdzOyIJCQkJCQkJXAorICAgInRmdHAgJGxvYWRhZGRyICRib290ZmlsZTsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgInRmdHAgJGZkdGFkZHIgJGZkdGZpbGU7IgkJCQkJCVwKKyAgICJib290bSAkbG9hZGFkZHIgLSAkZmR0YWRkciIKKworCisjZGVmaW5lIENPTkZJR19SQU1CT09UQ09NTUFORCBcCisgICAicnVuIHJhbWFyZ3M7IgkJCQkJCQlcCisgICAidGZ0cCAkcmFtZGlza2FkZHIgJHJhbWRpc2tmaWxlOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAidGZ0cCAkbG9hZGFkZHIgJGJvb3RmaWxlOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAiYm9vdG0gJGxvYWRhZGRyICRyYW1kaXNrYWRkciIKKworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQgIENPTkZJR19ORlNCT09UQ09NTUFORAorCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg2NDFIUENOLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODY0MUhQQ04uaAppbmRleCBiYmUzNTA1Li40MWRhYTJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODY0MUhQQ04uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODY0MUhQQ04uaApAQCAtNTc3LDYgKzU3Nyw3IEBACiAjZGVmaW5lIENPTkZJR19IT1NUTkFNRQkJdW5rbm93bgogI2RlZmluZSBDT05GSUdfUk9PVFBBVEgJCS9vcHQvbmZzcm9vdAogI2RlZmluZSBDT05GSUdfQk9PVEZJTEUJCXVJbWFnZQorI2RlZmluZSBDT05GSUdfVUJPT1RQQVRICXUtYm9vdC5iaW4JLyogVS1Cb290IGltYWdlIG9uIFRGVFAgc2VydmVyICovCiAKICNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjEuMQogI2RlZmluZSBDT05GSUdfR0FURVdBWUlQCTE5Mi4xNjguMS4xCkBAIC01OTIsMTAgKzU5MywxNyBAQAogCiAjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJICAgICAgICBcCiAgICAibmV0ZGV2PWV0aDBcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAidWJvb3Q9IiBNS19TVFIoQ09ORklHX1VCT09UUEFUSCkgIlwwIiAJCQkJXAorICAgInRmdHBmbGFzaD10ZnRwYm9vdCAkbG9hZGFkZHIgJHVib290OyAiIAkJCVwKKwkicHJvdGVjdCBvZmYgIiBNS19TVFIoVEVYVF9CQVNFKSAiICskZmlsZXNpemU7ICIgCVwKKwkiZXJhc2UgIiBNS19TVFIoVEVYVF9CQVNFKSAiICskZmlsZXNpemU7ICIgCQlcCisJImNwLmIgJGxvYWRhZGRyICIgTUtfU1RSKFRFWFRfQkFTRSkgIiAkZmlsZXNpemU7ICIgCVwKKwkicHJvdGVjdCBvbiAiIE1LX1NUUihURVhUX0JBU0UpICIgKyRmaWxlc2l6ZTsgIiAJXAorCSJjbXAuYiAkbG9hZGFkZHIgIiBNS19TVFIoVEVYVF9CQVNFKSAiICRmaWxlc2l6ZVwwIiAJXAogICAgImNvbnNvbGVkZXY9dHR5UzBcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgInJhbWRpc2thZGRyPTIwMDAwMDBcMCIJCQkJCQlcCiAgICAicmFtZGlza2ZpbGU9eW91ci5yYW1kaXNrLnUtYm9vdFwwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAiZHRiYWRkcj00MDAwMDBcMCIJCQkJCQlcCisgICAiZHRiYWRkcj1jMDAwMDBcMCIJCQkJCQlcCiAgICAiZHRiZmlsZT1tcGM4NjQxX2hwY24uZHRiXDAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICJlbi13ZD1tdy5iIGY4MTAwMDEwIDB4MDg7IGVjaG8gLWV4cGVjdDotIDA4OyBtZC5iIGY4MTAwMDEwIDFcMCIgXAogICAgImRpcy13ZD1tdy5iIGY4MTAwMDEwIDB4MDA7IGVjaG8gLWV4cGVjdDotIDAwOyBtZC5iIGY4MTAwMDEwIDFcMCIgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL05DNjUwLmggYi9pbmNsdWRlL2NvbmZpZ3MvTkM2NTAuaAppbmRleCA4ZGEyOWM0Li5hMTJjOGRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTkM2NTAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTkM2NTAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDYgRGV0bGV2IFp1bmRlbCwgZHp1QGRlbnguZGUKKyAqIChDKSBDb3B5cmlnaHQgMjAwNiwgMjAwNyBEZXRsZXYgWnVuZGVsLCBkenVAZGVueC5kZQogICogKEMpIENvcHlyaWdodCAyMDA1CiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKQEAgLTIzNywxOCArMjM3LDggQEAKIC8qCiAgKiBOQU5EIGZsYXNoIHN1cHBvcnQKICAqLwotI2RlZmluZSBDRkdfTkFORF9MRUdBQ1kKLQogI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCTEKLSNkZWZpbmUgTkFORF9DaGlwSURfVU5LTk9XTgkweDAwCi0jZGVmaW5lIFNFQ1RPUlNJWkUJCTUxMgotI2RlZmluZSBOQU5EX01BWF9GTE9PUlMJCTEKICNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCTEKLSNkZWZpbmUgQUREUl9QQUdFCQkyCi0jZGVmaW5lIEFERFJfQ09MVU1OX1BBR0UJMwotI2RlZmluZSBBRERSX0NPTFVNTgkJMQotI2RlZmluZSBOQU5EX05PX1JCCi0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogU1lQQ1IgLSBTeXN0ZW0gUHJvdGVjdGlvbiBDb250cm9sCQkJCQkxMS05CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUE01MjAuaCBiL2luY2x1ZGUvY29uZmlncy9QTTUyMC5oCmluZGV4IDljMjQxZTYuLjdkOTFhMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QTTUyMC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QTTUyMC5oCkBAIC0xNjAsNyArMTYwLDcgQEAKIC8qCiAgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCiAgKi8KLSN1bmRlZiBDRkdfSVBCU1BFRURfMTMzICAgCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLworI3VuZGVmIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSyAgIAkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KICNlbmRpZgogLyoKICAqIEkyQyBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvU0JDODU2MC5oIGIvaW5jbHVkZS9jb25maWdzL1NCQzg1NjAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI0NmExNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvU0JDODU2MC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEwICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIsMjAwMyBNb3Rvcm9sYSxJbmMuCi0gKiBYaWFuZ2h1YSBYaWFvIDxYLlhpYW9AbW90b3JvbGEuY29tPgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNCBXaW5kIFJpdmVyIFN5c3RlbXMgSW5jIDx3d3cud2luZHJpdmVyLmNvbT4uCi0gKiBBZGRlZCBzdXBwb3J0IGZvciBXaW5kIFJpdmVyIFNCQzg1NjAgYm9hcmQKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKiBtcGM4NTYwYWRzIGJvYXJkIGNvbmZpZ3VyYXRpb24gZmlsZSAqLwotLyogcGxlYXNlIHJlZmVyIHRvIGRvYy9SRUFETUUubXBjODV4eCBmb3IgbW9yZSBpbmZvICovCi0vKiBtYWtlIHN1cmUgeW91IGNoYW5nZSB0aGUgTUFDIGFkZHJlc3MgYW5kIG90aGVyIG5ldHdvcmsgcGFyYW1zIGZpcnN0LAotICogc2VhcmNoIGZvciBDT05GSUdfRVRIQUREUixDT05GSUdfU0VSVkVSSVAsZXRjIGluIHRoaXMgZmlsZQotICovCi0KLSNpZm5kZWYgX19DT05GSUdfSAotI2RlZmluZSBfX0NPTkZJR19ICi0KLSNpZiBYWFgKLSNkZWZpbmUgREVCVUcJCSAgICAgIC8qIEdlbmVyYWwgZGVidWcgKi8KLSNkZWZpbmUgRVRfREVCVUcKLSNlbmRpZgotI2RlZmluZSBUU0VDX0RFQlVHCi0KLS8qIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zICovCi0jZGVmaW5lIENPTkZJR19CT09LRQkJMQkvKiBCT09LRQkJCSovCi0jZGVmaW5lIENPTkZJR19FNTAwCQkxCS8qIEJPT0tFIGU1MDAgZmFtaWx5CQkqLwotI2RlZmluZSBDT05GSUdfTVBDODV4eAkJMQkvKiBNUEM4NTQwL01QQzg1NjAJCSovCi0jZGVmaW5lIENPTkZJR19NUEM4NXh4X1JFVjEJMQkvKiBNUEM4NXh4IFJldiAxLjAgY2hpcAkJKi8KLQotCi0jZGVmaW5lIENPTkZJR19DUE0yCQkxCS8qIGhhcyBDUE0yICovCi0jZGVmaW5lIENPTkZJR19TQkM4NTYwICAgICAgCTEgICAJLyogY29uZmlndXJhdGlvbiBmb3IgU0JDODU2MCBib2FyZCAqLwotCi0jZGVmaW5lIENPTkZJR19NUEM4NTYwQURTCTEJLyogTVBDODU2MEFEUyBib2FyZCBzcGVjaWZpYyAoc3VwcGxlbWVudCkJKi8KLQotI2RlZmluZSBDT05GSUdfVFNFQ19FTkVUCQkvKiB0c2VjIGV0aGVybmV0IHN1cHBvcnQJKi8KLSN1bmRlZglDT05GSUdfUENJCQkJLyogcGNpIGV0aGVybmV0IHN1cHBvcnQJCSovCi0jdW5kZWYgIENPTkZJR19FVEhFUl9PTl9GQ0MJCS8qIGNwbSBGQ0MgZXRoZXJuZXQgc3VwcG9ydAkqLwotCi0KLSNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKLQotLyogVXNpbmcgTG9jYWxidXMgU0RSQU0gdG8gZW11bGF0ZSBmbGFzaCBiZWZvcmUgd2UgY2FuIHByb2dyYW0gdGhlIGZsYXNoLAotICogbm9ybWFsbHkgeW91IG5lZWQgYSBmbGFzaC1ib290IGltYWdlKHUtYm9vdC5iaW4pLCBpZiBzbyB1bmRlZiB0aGlzLgotICovCi0jdW5kZWYgQ09ORklHX1JBTV9BU19GTEFTSAotCi0jaWYgZGVmaW5lZChDT05GSUdfUENJXzY2KQkJLyogc29tZSBQQ0kgY2FyZCBpcyAzM01oeiBvbmx5CSovCi0gICNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQk2NjAwMDAwMC8qIHN5c2NsayBmb3IgTVBDODV4eAkJKi8KLSNlbHNlCi0gICNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQkzMzAwMDAwMC8qIG1vc3QgcGNpIGNhcmRzIGFyZSAzM01oegkqLwotI2VuZGlmCi0KLS8qIGJlbG93IGNhbiBiZSB0b2dnbGVkIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcy4gb3RoZXJ3aXNlIHVzZSBkZWZhdWx0ICovCi0jZGVmaW5lIENPTkZJR19MMl9DQUNIRQkJCSAgICAvKiB0b2dnbGUgTDIgY2FjaGUJCSovCi0jdW5kZWYJQ09ORklHX0JUQgkJCSAgICAvKiB0b2dnbGUgYnJhbmNoIHByZWRpdGlvbgkqLwotI3VuZGVmCUNPTkZJR19BRERSX1NUUkVBTUlORwkJICAgIC8qIHRvZ2dsZSBhZGRyIHN0cmVhbWluZwkqLwotCi0jZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX0YgMQkgICAgLyogQ2FsbCBib2FyZF9lYXJseV9pbml0X2YJKi8KLQotI3VuZGVmCUNGR19EUkFNX1RFU1QJCQkgICAgLyogbWVtb3J5IHRlc3QsIHRha2VzIHRpbWUJKi8KLSNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDIwMDAwMCAgLyogbWVtdGVzdCByZWdpb24gKi8KLSNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDAwNDAwMDAwCi0KLSNpZiAoZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19UU0VDX0VORVQpIHx8IFwKLSAgICAgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19FVEhFUl9PTl9GQ0MpIHx8IFwKLSAgICAgZGVmaW5lZChDT05GSUdfVFNFQ19FTkVUKSAmJiBkZWZpbmVkKENPTkZJR19FVEhFUl9PTl9GQ0MpKQotI2Vycm9yICJZb3UgY2FuIG9ubHkgdXNlIE9ORSBvZiBQQ0kgRXRoZXJuZXQgQ2FyZCBvciBUU0VDIEV0aGVybmV0IG9yIENQTSBGQ0MuIgotI2VuZGlmCi0KLS8qCi0gKiBCYXNlIGFkZHJlc3NlcyAtLSBOb3RlIHRoZXNlIGFyZSBlZmZlY3RpdmUgYWRkcmVzc2VzIHdoZXJlIHRoZQotICogYWN0dWFsIHJlc291cmNlcyBnZXQgbWFwcGVkIChub3QgcGh5c2ljYWwgYWRkcmVzc2VzKQotICovCi0jZGVmaW5lIENGR19DQ1NSQkFSX0RFRkFVTFQJMHhmZjcwMDAwMAkvKiBDQ1NSQkFSIERlZmF1bHQJKi8KLQotI2lmIFhYWAotICAjZGVmaW5lIENGR19DQ1NSQkFSCQkweGZkZjAwMDAwCS8qIHJlbG9jYXRlZCBDQ1NSQkFSCSovCi0jZWxzZQotICAjZGVmaW5lIENGR19DQ1NSQkFSCQkweGZmNzAwMDAwCS8qIGRlZmF1bHQgQ0NTUkJBUgkqLwotI2VuZGlmCi0jZGVmaW5lIENGR19JTU1SCQlDRkdfQ0NTUkJBUgkvKiBQUUlJIHVzZXMgQ0ZHX0lNTVIJKi8KLQotI2RlZmluZSBDRkdfRERSX1NEUkFNX0JBU0UJMHgwMDAwMDAwMAkvKiBERFIgaXMgc3lzdGVtIG1lbW9yeQkgKi8KLSNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJCUNGR19ERFJfU0RSQU1fQkFTRQotI2RlZmluZSBDRkdfU0RSQU1fU0laRQkJNTEyCQkvKiBERFIgaXMgNTEyTUIgKi8KLSNkZWZpbmUgU1BEX0VFUFJPTV9BRERSRVNTCTB4NTUJCS8qICBERFIgRElNTSAqLwotCi0jdW5kZWYgIENPTkZJR19ERFJfRUNDCQkJCS8qIG9ubHkgZm9yIEVDQyBERFIgbW9kdWxlCSovCi0jdW5kZWYgIENPTkZJR19TUERfRUVQUk9NCQkJLyogVXNlIFNQRCBFRVBST00gZm9yIEREUiBzZXR1cCAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDODV4eF9SRVYxKQotICAjZGVmaW5lIENPTkZJR19ERFJfRExMCQkJLyogcG9zc2libGUgRExMIGZpeCBuZWVkZWQJKi8KLSNlbmRpZgotCi0jdW5kZWYgQ09ORklHX0NMT0NLU19JTl9NSFoKLQotI2lmIGRlZmluZWQoQ09ORklHX1JBTV9BU19GTEFTSCkKLSAgI2RlZmluZSBDRkdfTEJDX1NEUkFNX0JBU0UJMHhmYzAwMDAwMAkvKiBMb2NhbGJ1cyBTRFJBTSAqLwotICAjZGVmaW5lIENGR19GTEFTSF9CQVNFCTB4ZjgwMDAwMDAgICAgICAvKiBzdGFydCBvZiBGTEFTSCA4TSAgKi8KLSAgI2RlZmluZSBDRkdfQlIwX1BSRUxJTQkweGY4MDAwODAxICAgICAgLyogcG9ydCBzaXplIDhiaXQgKi8KLSAgI2RlZmluZSBDRkdfT1IwX1BSRUxJTQkweGY4MDAwZmY3CS8qIDhNQiBGbGFzaAkJKi8KLSNlbHNlIC8qIEJvb3QgZnJvbSByZWFsIEZsYXNoICovCi0gICNkZWZpbmUgQ0ZHX0xCQ19TRFJBTV9CQVNFCTB4ZjgwMDAwMDAJLyogTG9jYWxidXMgU0RSQU0gKi8KLSAgI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkweGZmODAwMDAwICAgICAgLyogc3RhcnQgb2YgRkxBU0ggOE0gICAgKi8KLSAgI2RlZmluZSBDRkdfQlIwX1BSRUxJTQkweGZmODAwODAxICAgICAgLyogcG9ydCBzaXplIDhiaXQgICAgICAqLwotICAjZGVmaW5lIENGR19PUjBfUFJFTElNCTB4ZmY4MDBmZjcJLyogOE1CIEZsYXNoCQkqLwotI2VuZGlmCi0jZGVmaW5lIENGR19MQkNfU0RSQU1fU0laRQk2NAkJLyogTEJDIFNEUkFNIGlzIDY0TUIJKi8KLQotLyogbG9jYWwgYnVzIGRlZmluaXRpb25zICovCi0jZGVmaW5lIENGR19CUjFfUFJFTElNCQkweGU0MDAxODAxCS8qIDY0TSwgMzItYml0IGZsYXNoICovCi0jZGVmaW5lIENGR19PUjFfUFJFTElNCQkweGZjMDAwZmY3Ci0KLSNkZWZpbmUgQ0ZHX0JSMl9QUkVMSU0JCTB4MDAwMDAwMDAJLyogQ1MyIG5vdCB1c2VkICovCi0jZGVmaW5lIENGR19PUjJfUFJFTElNCQkweDAwMDAwMDAwCi0KLSNkZWZpbmUgQ0ZHX0JSM19QUkVMSU0JCTB4ZjAwMDE4NjEJLyogNjRNQiBsb2NhbGJ1cyBTRFJBTQkqLwotI2RlZmluZSBDRkdfT1IzX1BSRUxJTQkJMHhmYzAwMGNjMQotCi0jaWYgZGVmaW5lZChDT05GSUdfUkFNX0FTX0ZMQVNIKQotICAjZGVmaW5lIENGR19CUjRfUFJFTElNCTB4ZjQwMDE4NjEJLyogNjRNIGxvY2FsYnVzIFNEUkFNICovCi0jZWxzZQotICAjZGVmaW5lIENGR19CUjRfUFJFTElNCTB4ZjgwMDE4NjEJLyogNjRNIGxvY2FsYnVzIFNEUkFNICovCi0jZW5kaWYKLSNkZWZpbmUgQ0ZHX09SNF9QUkVMSU0JCTB4ZmMwMDBjYzEKLQotI2RlZmluZSBDRkdfQlI1X1BSRUxJTQkJMHhmYzAwMDgwMQkvKiAxNk0gQ1M1IG1pc2MgZGV2aWNlcyAqLwotI2lmIDEKLSAgI2RlZmluZSBDRkdfT1I1X1BSRUxJTQkweGZmMDAwZmY3Ci0jZWxzZQotICAjZGVmaW5lIENGR19PUjVfUFJFTElNCTB4ZmYwMDAwZjAKLSNlbmRpZgotCi0jZGVmaW5lIENGR19CUjZfUFJFTElNCQkweGUwMDAxODAxCS8qIDY0TSwgMzItYml0IGZsYXNoICovCi0jZGVmaW5lIENGR19PUjZfUFJFTElNCQkweGZjMDAwZmY3Ci0jZGVmaW5lIENGR19MQkNfTENSUgkJMHgwMDAzMDAwMgkvKiBsb2NhbCBidXMgZnJlcQkqLwotI2RlZmluZSBDRkdfTEJDX0xCQ1IJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ0ZHX0xCQ19MU1JUCQkweDIwMDAwMDAwCi0jZGVmaW5lIENGR19MQkNfTVJUUFIJCTB4MjAwMDAwMDAKLSNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl8xCQkweDI4NjFiNzIzCi0jZGVmaW5lIENGR19MQkNfTFNETVJfMgkJMHgwODYxYjcyMwotI2RlZmluZSBDRkdfTEJDX0xTRE1SXzMJCTB4MDg2MWI3MjMKLSNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl80CQkweDE4NjFiNzIzCi0jZGVmaW5lIENGR19MQkNfTFNETVJfNQkJMHg0MDYxYjcyMwotCi0vKiBqdXN0IGhpamFjayB0aGUgTU9UIEJDU1IgZGVmIGZvciBTQkM4NTYwIG1pc2MgZGV2aWNlcyAqLwotI2RlZmluZSBDRkdfQkNTUgkJKChDRkdfQlI1X1BSRUxJTSAmIDB4ZmYwMDAwMDApfDB4MDA0MDAwMDApCi0vKiB0aGUgc2l6ZSBvZiBDUzUgbmVlZHMgdG8gYmUgPj0gMTZNIGZvciBUTEIgYW5kIExBVyBzZXR1cHMgKi8KLQotI2RlZmluZSBDT05GSUdfTDFfSU5JVF9SQU0KLSNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0xPQ0sJMQotI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDcwMDAwMDAwCS8qIEluaXRpYWwgUkFNIGFkZHJlc3MJKi8KLSNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDQwMDAJCS8qIEVuZCBvZiB1c2VkIGFyZWEgaW4gUkFNICovCi0KLSNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CQkvKiBudW0gYnl0ZXMgaW5pdGlhbCBkYXRhICovCi0jZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKLSNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQKLQotI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCSgyNTYgKiAxMDI0KQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uICovCi0jZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoMTI4ICogMTAyNCkJLyogUmVzZXJ2ZWQgZm9yIG1hbGxvYyAqLwotCi0vKiBTZXJpYWwgUG9ydCAqLwotI3VuZGVmICBDT05GSUdfQ09OU19PTl9TQ0MJCQkvKiBkZWZpbmUgaWYgY29uc29sZSBvbiBTQ0MgKi8KLSN1bmRlZglDT05GSUdfQ09OU19OT05FCQkJLyogZGVmaW5lIGlmIGNvbnNvbGUgb24gc29tZXRoaW5nIGVsc2UgKi8KLQotI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWCAgICAgMQotI3VuZGVmCUNPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTwotI2RlZmluZSBDRkdfTlMxNjU1MAotI2RlZmluZSBDRkdfTlMxNjU1MF9TRVJJQUwKLSNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUJMQotI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsJCTE4NDMyMDAgLyogZ2V0X2J1c19mcmVxKDApICovCi0jZGVmaW5lIENPTkZJR19CQVVEUkFURQkJOTYwMAotCi0jZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgXAotCXszMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLDExNTIwMH0KLQotI2RlZmluZSBDRkdfTlMxNjU1MF9DT00xCSgoQ0ZHX0JSNV9QUkVMSU0gJiAweGZmMDAwMDAwKSsweDAwNzAwMDAwKQotI2RlZmluZSBDRkdfTlMxNjU1MF9DT00yCSgoQ0ZHX0JSNV9QUkVMSU0gJiAweGZmMDAwMDAwKSsweDAwODAwMDAwKQotCi0vKiBVc2UgdGhlIEhVU0ggcGFyc2VyICovCi0jZGVmaW5lIENGR19IVVNIX1BBUlNFUgotI2lmZGVmCUNGR19IVVNIX1BBUlNFUgotI2RlZmluZSBDRkdfUFJPTVBUX0hVU0hfUFMyICI+ICIKLSNlbmRpZgotCi0vKiBJMkMgKi8KLSNkZWZpbmUJIENPTkZJR19IQVJEX0kyQwkJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydCovCi0jdW5kZWYJQ09ORklHX1NPRlRfSTJDCQkJLyogSTJDIGJpdC1iYW5nZWQgKi8KLSNkZWZpbmUgQ0ZHX0kyQ19TUEVFRAkJNDAwMDAwCS8qIEkyQyBzcGVlZCBhbmQgc2xhdmUgYWRkcmVzcwkqLwotI2RlZmluZSBDRkdfSTJDX1NMQVZFCQkweDdGCi0jZGVmaW5lIENGR19JMkNfTk9QUk9CRVMJezB4Njl9CS8qIERvbid0IHByb2JlIHRoZXNlIGFkZHJzICovCi0KLSNkZWZpbmUgQ0ZHX1BDSV9NRU1fQkFTRQkweEMwMDAwMDAwCi0jZGVmaW5lIENGR19QQ0lfTUVNX1BIWVMJMHhDMDAwMDAwMAotI2RlZmluZSBDRkdfUENJX01FTV9TSVpFCTB4MTAwMDAwMDAKLQotI2lmIGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkJCS8qIFRTRUMgRXRoZXJuZXQgcG9ydCAqLwotCi0jICBkZWZpbmUgQ09ORklHX05FVF9NVUxUSQkxCi0jICBkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQJCSovCi0jICBkZWZpbmUgQ09ORklHX01QQzg1eHhfVFNFQzEKLSMgIGRlZmluZSBDT05GSUdfTVBDODV4eF9UU0VDMV9OQU1FCSJUU0VDMCIKLSMgIGRlZmluZSBUU0VDMV9QSFlfQUREUgkyNQotIyAgZGVmaW5lIFRTRUMxX1BIWUlEWAkJMAotLyogT3B0aW9ucyBhcmU6IFRTRUMwICovCi0jICBkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiVFNFQzAiCi0KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfRVRIRVJfT05fRkNDKQkvKiBDUE0gRkNDIEV0aGVybmV0ICovCi0KLSAgI3VuZGVmICBDT05GSUdfRVRIRVJfTk9ORQkJLyogZGVmaW5lIGlmIGV0aGVyIG9uIHNvbWV0aGluZyBlbHNlICovCi0gICNkZWZpbmUgQ09ORklHX0VUSEVSX09OX0ZDQzIJCS8qIGNwbSBGQ0MgZXRoZXJuZXQgc3VwcG9ydAkqLwotICAjZGVmaW5lIENPTkZJR19FVEhFUl9JTkRFWAkyCS8qIHdoaWNoIGNoYW5uZWwgZm9yIGV0aGVyICAqLwotCi0gICNpZiAoQ09ORklHX0VUSEVSX0lOREVYID09IDIpCi0gICAgLyoKLSAgICAgKiAtIFJ4LUNMSyBpcyBDTEsxMwotICAgICAqIC0gVHgtQ0xLIGlzIENMSzE0Ci0gICAgICogLSBTZWxlY3QgYnVzIGZvciBiZC9idWZmZXJzCi0gICAgICogLSBGdWxsIGR1cGxleAotICAgICAqLwotICAgICNkZWZpbmUgQ0ZHX0NNWEZDUl9NQVNLCShDTVhGQ1JfRkMyIHwgQ01YRkNSX1JGMkNTX01TSyB8IENNWEZDUl9URjJDU19NU0spCi0gICAgI2RlZmluZSBDRkdfQ01YRkNSX1ZBTFVFCShDTVhGQ1JfUkYyQ1NfQ0xLMTMgfCBDTVhGQ1JfVEYyQ1NfQ0xLMTQpCi0gICAgI2RlZmluZSBDRkdfQ1BNRkNSX1JBTVRZUEUJMAotICAgICNkZWZpbmUgQ0ZHX0ZDQ19QU01SCShGQ0NfUFNNUl9GREUpCi0KLSAgI2VsaWYgKENPTkZJR19FVEhFUl9JTkRFWCA9PSAzKQotICAgIC8qIG5lZWQgbW9yZSBkZWZpbml0aW9ucyBoZXJlIGZvciBGRTMgKi8KLSAgI2VuZGlmCQkJCS8qIENPTkZJR19FVEhFUl9JTkRFWCAqLwotCi0gICNkZWZpbmUgQ09ORklHX01JSQkJCS8qIE1JSSBQSFkgbWFuYWdlbWVudCAqLwotICAjZGVmaW5lIENPTkZJR19CSVRCQU5HTUlJCQkvKiBiaXQtYmFuZyBNSUkgUEhZIG1hbmFnZW1lbnQJKi8KLSAgLyoKLSAgICogR1BJTyBwaW5zIHVzZWQgZm9yIGJpdC1iYW5nZWQgTUlJIGNvbW11bmljYXRpb25zCi0gICAqLwotICAjZGVmaW5lIE1ESU9fUE9SVAkyCQkvKiBQb3J0IEMgKi8KLSAgI2RlZmluZSBNRElPX0FDVElWRQkoaW9wLT5wZGlyIHw9ICAweDAwNDAwMDAwKQotICAjZGVmaW5lIE1ESU9fVFJJU1RBVEUJKGlvcC0+cGRpciAmPSB+MHgwMDQwMDAwMCkKLSAgI2RlZmluZSBNRElPX1JFQUQJKChpb3AtPnBkYXQgJiAgMHgwMDQwMDAwMCkgIT0gMCkKLQotICAjZGVmaW5lIE1ESU8oYml0KQlpZihiaXQpIGlvcC0+cGRhdCB8PSAgMHgwMDQwMDAwMDsgXAotCQkJZWxzZQlpb3AtPnBkYXQgJj0gfjB4MDA0MDAwMDAKLQotICAjZGVmaW5lIE1EQyhiaXQpCWlmKGJpdCkgaW9wLT5wZGF0IHw9ICAweDAwMjAwMDAwOyBcCi0JCQllbHNlCWlvcC0+cGRhdCAmPSB+MHgwMDIwMDAwMAotCi0gICNkZWZpbmUgTUlJREVMQVkJdWRlbGF5KDEpCi0KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCi0gKi8KLQotI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkxCS8qIEZsYXNoIGlzIENGSSBjb25mb3JtYW50CQkqLwotI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkxCS8qIFVzZSB0aGUgY29tbW9uIGRyaXZlcgkJKi8KLSNpZiAwCi0jZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFIDEgICAgLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgICAgICovCi0jZGVmaW5lIENGR19GTEFTSF9QUk9URUNUSU9OCQkvKiB1c2UgaGFyZHdhcmUgcHJvdGVjdGlvbgkJKi8KLSNlbmRpZgotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJNjQJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KLQotI3VuZGVmCUNGR19GTEFTSF9DSEVDS1NVTQotI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkyMDAwMDAJCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwMDAJCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KLQotI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCVRFWFRfQkFTRQkvKiBzdGFydCBvZiBtb25pdG9yCSovCi0KLSNpZiAwCi0vKiBYWFggVGhpcyBkb2Vzbid0IHdvcmsgYW5kIEkgZG9uJ3Qgd2FudCB0byBmaXggaXQgKi8KLSNpZiAoQ0ZHX01PTklUT1JfQkFTRSA8IENGR19GTEFTSF9CQVNFKQotICAjZGVmaW5lIENGR19SQU1CT09UCi0jZWxzZQotICAjdW5kZWYgIENGR19SQU1CT09UCi0jZW5kaWYKLSNlbmRpZgotCi0vKiBFbnZpcm9ubWVudCAqLwotI2lmICFkZWZpbmVkKENGR19SQU1CT09UKQotICAjaWYgZGVmaW5lZChDT05GSUdfUkFNX0FTX0ZMQVNIKQotICAgICNkZWZpbmUgQ0ZHX0VOVl9JU19OT1dIRVJFCi0gICAgI2RlZmluZSBDRkdfRU5WX0FERFIJKENGR19GTEFTSF9CQVNFICsgMHgxMDAwMDApCi0gICAgI2RlZmluZSBDRkdfRU5WX1NJWkUJMHgyMDAwCi0gICNlbHNlCi0gICAgI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKLSAgICAjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4MjAwMDAgLyogMTI4SyhvbmUgc2VjdG9yKSBmb3IgZW52ICovCi0gICAgI2RlZmluZSBDRkdfRU5WX0FERFIJKENGR19NT05JVE9SX0JBU0UgLSBDRkdfRU5WX1NFQ1RfU0laRSkKLSAgICAjZGVmaW5lIENGR19FTlZfU0laRQkweDIwMDAgLyogQ0ZHX0VOVl9TRUNUX1NJWkUgKi8KLSAgI2VuZGlmCi0jZWxzZQotICAjZGVmaW5lIENGR19OT19GTEFTSAkJMQkvKiBGbGFzaCBpcyBub3QgdXNhYmxlIG5vdwkqLwotICAjZGVmaW5lIENGR19FTlZfSVNfTk9XSEVSRQkxCS8qIFN0b3JlIEVOViBpbiBtZW1vcnkgb25seQkqLwotICAjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19NT05JVE9SX0JBU0UgLSAweDEwMDApCi0gICNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAKLSNlbmRpZgotCi0jZGVmaW5lIENPTkZJR19CT09UQVJHUyAicm9vdD0vZGV2L25mcyBydyBuZnNyb290PTE5Mi4xNjguMC4yNTE6L3RmdHBib290IGlwPTE5Mi4xNjguMC4xMDU6MTkyLjE2OC4wLjI1MTo6MjU1LjI1NS4yNTUuMDpzYmM4NTYwOmV0aDA6b2ZmIGNvbnNvbGU9dHR5UzAsOTYwMCIKLS8qI2RlZmluZSBDT05GSUdfQk9PVEFSR1MgICAgICAicm9vdD0vZGV2L3JhbSBydyBjb25zb2xlPXR0eVMwLDExNTIwMCIqLwotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImJvb3RtIDB4ZmY4MDAwMDAgMHhmZmEwMDAwMCIKLSNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQk1CS8qIC0xIGRpc2FibGUgYXV0b2Jvb3QgKi8KLQotI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkxCS8qIGVjaG8gb24gZm9yIHNlcmlhbCBkb3dubG9hZAkqLwotI2RlZmluZSBDRkdfTE9BRFNfQkFVRF9DSEFOR0UJMQkvKiBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2UJKi8KLQotI2lmIGRlZmluZWQoQ0ZHX1JBTUJPT1QpIHx8IGRlZmluZWQoQ09ORklHX1JBTV9BU19GTEFTSCkKLSAgI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLSAgICAjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKChDT05GSUdfQ01EX0RGTCB8IENGR19DTURfUENJIHwgXAotCQkJCUNGR19DTURfUElORyB8IENGR19DTURfSTJDKSAmIFwKLQkJCQkgfihDRkdfQ01EX0VOViB8IFwKLQkJCQkgIENGR19DTURfTE9BRFMgKSkKLSAgI2VsaWYgKGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkgfHwgZGVmaW5lZChDT05GSUdfRVRIRVJfT05fRkNDKSkKLSAgICAjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKChDT05GSUdfQ01EX0RGTCB8IENGR19DTURfTUlJIHwgXAotCQkJCUNGR19DTURfUElORyB8IENGR19DTURfSTJDKSAmIFwKLQkJCQl+KENGR19DTURfRU5WKSkKLSAgI2VuZGlmCi0jZWxzZQotICAjaWYgZGVmaW5lZChDT05GSUdfUENJKQotICAgICNkZWZpbmUgIENPTkZJR19DT01NQU5EUwkoQ09ORklHX0NNRF9ERkwgfCBDRkdfQ01EX1BDSSB8IFwKLQkJCQlDRkdfQ01EX1BJTkcgfCBDRkdfQ01EX0kyQykKLSAgI2VsaWYgKGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkgfHwgZGVmaW5lZChDT05GSUdfRVRIRVJfT05fRkNDKSkKLSAgICAjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9NSUkgfCBcCi0JCQkJQ0ZHX0NNRF9QSU5HIHwgQ0ZHX0NNRF9JMkMpCi0gICNlbmRpZgotI2VuZGlmCi0KLSNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KLQotI3VuZGVmIENPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkCQkqLwotCi0vKgotICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwotICovCi0jZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLwotI2RlZmluZSBDRkdfUFJPTVBUCSJTQkM4NTYwPT4gIiAvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKLSAgI2RlZmluZSBDRkdfQ0JTSVpFCTEwMjQJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCi0jZWxzZQotICAjZGVmaW5lIENGR19DQlNJWkUJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLwotI2VuZGlmCi0jZGVmaW5lIENGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLwotI2RlZmluZSBDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KLSNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLwotI2RlZmluZSBDRkdfTE9BRF9BRERSCTB4MTAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLwotI2RlZmluZSBDRkdfSFoJCTEwMDAJCS8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MgKi8KLQotLyoKLSAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKLSAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCi0gKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gKi8KLSNkZWZpbmUgQ0ZHX0JPT1RNQVBTWgkJKDggPDwgMjApIC8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXggKi8KLQotLyogQ2FjaGUgQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBDRkdfRENBQ0hFX1NJWkUJCTMyNzY4Ci0jZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRQkzMgotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCi0gICNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlICovCi0jZW5kaWYKLQotLyoKLSAqIEludGVybmFsIERlZmluaXRpb25zCi0gKgotICogQm9vdCBGbGFncwotICovCi0jZGVmaW5lIEJPT1RGTEFHX0NPTEQJMHgwMQkJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0ggKi8KLSNkZWZpbmUgQk9PVEZMQUdfV0FSTQkweDAyCQkvKiBTb2Z0d2FyZSByZWJvb3QJCSovCi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQotICAjZGVmaW5lIENPTkZJR19LR0RCX0JBVURSQVRFCTIzMDQwMAkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLwotICAjZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkyCS8qIHdoaWNoIHNlcmlhbCBwb3J0IHRvIHVzZSAqLwotI2VuZGlmCi0KLS8qTm90ZTogY2hhbmdlIGJlbG93IGZvciB5b3VyIG5ldHdvcmsgc2V0dGluZyEhISAqLwotI2lmIGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkgfHwgZGVmaW5lZChDT05GSUdfRVRIRVJfT05fRkNDKQotIyAgZGVmaW5lIENPTkZJR19FVEhBRERSCTAwOnZ2Ond3Onh4Onl5OjhhCi0jICBkZWZpbmUgQ09ORklHX0hBU19FVEgxCi0jICBkZWZpbmUgQ09ORklHX0VUSDFBRERSCTAwOnZ2Ond3Onh4Onl5OjhiCi0jICBkZWZpbmUgQ09ORklHX0hBU19FVEgyCi0jICBkZWZpbmUgQ09ORklHX0VUSDJBRERSCTAwOnZ2Ond3Onh4Onl5OjhjCi0jZW5kaWYKLQotI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCVlvdXJTZXJ2ZXJJUAotI2RlZmluZSBDT05GSUdfSVBBRERSCQlZb3VyVGFyZ2V0SVAKLSNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUAlZb3VyR2F0ZXdheUlQCi0jZGVmaW5lIENPTkZJR19ORVRNQVNLCQkyNTUuMjU1LjI1NS4wCi0jZGVmaW5lIENPTkZJR19IT1NUTkFNRQkJU0JDODU2MAotI2RlZmluZSBDT05GSUdfUk9PVFBBVEgJCVlvdXJSb290UGF0aAotI2RlZmluZSBDT05GSUdfQk9PVEZJTEUJCVlvdXJJbWFnZU5hbWUKLQotI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9TTU40Mi5oIGIvaW5jbHVkZS9jb25maWdzL1NNTjQyLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDU4ODgxOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9TTU40Mi5oCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA3CisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIENvbmZpZ3VhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIFNNTjQyIGJvYXJkIGZyb20gU2llbWVucy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSWYgd2UgYXJlIGRldmVsb3BpbmcsIHdlIG1pZ2h0IHdhbnQgdG8gc3RhcnQgdS1ib290IGZyb20gcmFtCisgKiBzbyB3ZSBNVVNUIE5PVCBpbml0aWFsaXplIGNyaXRpY2FsIHJlZ3MgbGlrZSBtZW0tdGltaW5nIC4uLgorICovCisjdW5kZWYgQ09ORklHX0lOSVRfQ1JJVElDQUwJCS8qIHVuZGVmIGZvciBkZXZlbG9waW5nICovCisKKyN1bmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisjdW5kZWYgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKiAoZWFzeSB0byBjaGFuZ2UpCisgKi8KKyNkZWZpbmUgQ09ORklHX0FSTTcJCTEJLyogVGhpcyBpcyBhIEFSTTcgQ1BVCSovCisjZGVmaW5lIENPTkZJR19BUk1fVEhVTUIJMQkvKiB0aGlzIGlzIGFuIEFSTTcyMFRETUkgKi8KKyNkZWZpbmUgQ09ORklHX0xQQzIyOTIKKyN1bmRlZglDT05GSUdfQVJNN19SRVZECQkvKiBkaXNhYmxlIEFSTTcyMCBSRVYuRCBXb3JrYXJvdW5kcyAqLworCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkvKiBkb24ndCBuZWVkIHRoZW0gYW55bW9yZSAqLworCisvKgorICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjgqMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBzZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19TRVJJQUwxCQkxCS8qIHdlIHVzZSBTZXJpYWwgbGluZSAxICovCisKKy8qIGFsbG93IHRvIG92ZXJ3cml0ZSBzZXJpYWwgYW5kIGV0aGFkZHIgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorCisjZGVmaW5lIENPTkZJR19CT09UUF9NQVNLCShDT05GSUdfQk9PVFBfREVGQVVMVHxDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFKQorCisvKiBlbmFibGUgSTJDIGFuZCBzZWxlY3QgdGhlIGhhcmR3YXJlL3NvZnR3YXJlIGRyaXZlciAqLworI3VuZGVmCUNPTkZJR19IQVJEX0kyQwkJCS8qIEkyQyB3aXRoIGhhcmR3YXJlIHN1cHBvcnQJKi8KKyNkZWZpbmUgQ09ORklHX1NPRlRfSTJDCQkxCS8qIEkyQyBiaXQtYmFuZ2VkCQkqLworLyogdGhpcyB3b3VsZCBiZSAweEFFIGlmIEUwLCBFMSBhbmQgRTIgd2VyZSBwdWxsZWQgaGlnaCAqLworI2RlZmluZSBDRkdfSTJDX1NMQVZFCQkweEEwCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFIJKDB4QTAgPj4gMSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gMiAvKiAxNiBiaXQgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyA2IC8qIDY0IGJ5dGVzIHBlciB3cml0ZSAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMjAKKy8qIG5vdCB1c2VkIGJ1dCByZXF1aXJlZCBieSBkZXZpY2VzLmMgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRCAxMDAwMAorCisjaWZkZWYgQ09ORklHX1NPRlRfSTJDCisvKgorICogU29mdHdhcmUgKGJpdC1iYW5nKSBJMkMgZHJpdmVyIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBTQ0wJCTB4MDAwMDAwMDQJCS8qIFAwLjIgKi8KKyNkZWZpbmUgU0RBCQkweDAwMDAwMDA4CQkvKiBQMC4zICovCisKKyNkZWZpbmUJSTJDX1JFQUQJKChHRVQzMihJTzBQSU4pICYgU0RBKSA/IDEgOiAwKQorI2RlZmluZQlJMkNfU0RBKHgpCXsgaWYgKHgpIFBVVDMyKElPMFNFVCwgU0RBKTsgZWxzZSBQVVQzMihJTzBDTFIsIFNEQSk7IH0KKyNkZWZpbmUJSTJDX1NDTCh4KQl7IGlmICh4KSBQVVQzMihJTzBTRVQsIFNDTCk7IGVsc2UgUFVUMzIoSU8wQ0xSLCBTQ0wpOyB9CisjZGVmaW5lCUkyQ19ERUxBWQl7IHVkZWxheSgxMDApOyB9CisjZGVmaW5lCUkyQ19BQ1RJVkUJeyB1bnNpZ25lZCBpbnQgaTJjdG1wOyBcCisJCQkJCSAgaTJjdG1wID0gR0VUMzIoSU8wRElSKTsgXAorCQkJCQkgIGkyY3RtcCB8PSBTREE7IFwKKwkJCQkJICBQVVQzMihJTzBESVIsIGkyY3RtcCk7IH0KKyNkZWZpbmUJSTJDX1RSSVNUQVRFCXsgdW5zaWduZWQgaW50IGkyY3RtcDsgXAorCQkJCQkgICAgICBpMmN0bXAgPSBHRVQzMihJTzBESVIpOyBcCisJCQkJCSAgICAgIGkyY3RtcCAmPSB+U0RBOyBcCisJCQkJCQkgIFBVVDMyKElPMERJUiwgaTJjdG1wKTsgfQorI2VuZGlmIC8qIENPTkZJR19TT0ZUX0kyQyAqLworCisvKgorICogU3VwcG9ydGVkIGNvbW1hbmRzCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCSAgICAgICAoQ09ORklHX0NNRF9ERkwJfCBcCisJCQkJQ0ZHX0NNRF9ESENQCXwgXAorCQkJCUNGR19DTURfRkFUCQl8IFwKKwkJCQlDRkdfQ01EX01NQwkJfCBcCisJCQkJQ0ZHX0NNRF9ORVQJCXwgXAorCQkJCUNGR19DTURfRUVQUk9NCXwgXAorCQkJCUNGR19DTURfUElORykKKworI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgorCisvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQk1CisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZQlDRkdfUFJPTVBUCQkiU01ONDIgIyAiIC8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQJKi8KKyNkZWZpbmUJQ0ZHX0NCU0laRQkJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2RlZmluZQlDRkdfUEJTSVpFIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUJQ0ZHX01BWEFSR1MJCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCTB4ODE4MDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbgkqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4ODMwMDAwMDAJLyogMjQgTUIgaW4gU1JBTQkqLworCisjdW5kZWYJQ0ZHX0NMS1NfSU5fSFoJCS8qIGV2ZXJ5dGhpbmcsIGluY2wgYm9hcmQgaW5mbywgaW4gSHogKi8KKworI2RlZmluZQlDRkdfTE9BRF9BRERSCQkweDgxMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzCSovCisJCQkJCQkvKiBmb3IgdUNsaW51eCBpbWcgaXMgaGVyZSovCisKKyNkZWZpbmUgQ0ZHX1NZU19DTEtfRlJFUQk1ODk4MjQwMAkvKiBIeiAqLworI2RlZmluZQlDRkdfSFoJCQkyMDQ4CQkvKiBkZWNyZW1lbnRlciBmcmVxIGluIEh6ICovCisKKwkJCQkJCS8qIHZhbGlkIGJhdWRyYXRlcyAqLworI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTdGFjayBzaXplcworICoKKyAqIFRoZSBzdGFjayBzaXplcyBhcmUgc2V0IHVwIGluIHN0YXJ0LlMgdXNpbmcgdGhlIHNldHRpbmdzIGJlbG93CisgKi8KKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMTI4KjEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0lSUQkoNCoxMDI0KQkvKiBJUlEgc3RhY2sgKi8KKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9GSVEJKDQqMTAyNCkJLyogRklRIHN0YWNrICovCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUGh5c2ljYWwgTWVtb3J5IE1hcAorICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEJICAgLyogd2UgaGF2ZSAxIGJhbmsgb2YgU1JBTSAqLworI2RlZmluZSBQSFlTX1NEUkFNXzEJCTB4ODEwMDAwMDAgLyogU1JBTSBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCTB4MDIwMDAwMDAgLyogMzIgTUIgU1JBTSAqLworCisvKiBUaGlzIGlzIHRoZSBleHRlcm5hbCBmbGFzaCAqLworI2RlZmluZSBQSFlTX0ZMQVNIXzEJCTB4ODAwMDAwMDAgLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkUJCTB4MDEwMDAwMDAgLyogMTYgTUIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgorICovCisKKy8qCisgKiBUaGUgZmlyc3QgZW50cnkgaW4gQ0ZHX0ZMQVNIX0JBTktTX0xJU1QgaXMgYSBkdW1teSwgYnV0IGl0IG11c3QgYmUgcHJlc2VudC4KKyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAl7IDAsIFBIWVNfRkxBU0hfMSB9CisjZGVmaW5lIENGR19GTEFTSF9BRERSMAkJCTB4NTU1CisjZGVmaW5lIENGR19GTEFTSF9BRERSMQkJCTB4MkFBCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTE2Mzg0CS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTEyOCAgLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICAgICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLworCisjZGVmaW5lCUNGR19FTlZfSVNfSU5fRkxBU0gJMQorLyogVGhlIEVudmlyb25tZW50IFNlY3RvciBpcyBpbiB0aGUgQ1BVLWludGVybmFsIGZsYXNoICovCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkwCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkweDNDMDAwCisjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19GTEFTSF9CQVNFICsgQ0ZHX0VOVl9PRkZTRVQpCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUworI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRworI2RlZmluZSBDT05GSUdfTU1DCQkJMQorLyogd2UgdXNlIHRoaXMgZXRoZXJuZXQgY2hpcCAqLworI2RlZmluZSBDT05GSUdfRU5DMjhKNjAKKworI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UQjUyMDAuaCBiL2luY2x1ZGUvY29uZmlncy9UQjUyMDAuaAppbmRleCA4YTZlNWE2Li43MTI2NjhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVEI1MjAwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1RCNTIwMC5oCkBAIC0yMDAsMTcgKzIwMCwxNyBAQAogLyoKICAqIElQQiBCdXMgY2xvY2tpbmcgY29uZmlndXJhdGlvbi4KICAqLwotI2RlZmluZSBDRkdfSVBCU1BFRURfMTMzCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLworI2RlZmluZSBDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEsJCS8qIGRlZmluZSBmb3IgMTMzTUh6IHNwZWVkICovCiAKLSNpZiBkZWZpbmVkKENGR19JUEJTUEVFRF8xMzMpCisjaWYgZGVmaW5lZChDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEspCiAvKgogICogUENJIEJ1cyBjbG9ja2luZyBjb25maWd1cmF0aW9uCiAgKgogICogQWN0dWFsbHkgYSBQQ0kgQ2xvY2sgb2YgNjYgTUh6IGlzIG9ubHkgc2V0IChpbiBjcHVfaW5pdC5jKSBpZgotICogQ0ZHX0lQQlNQRUVEXzEzMyBpcyBkZWZpbmVkLiBUaGlzIGlzIGJlY2F1c2UgYSBQQ0kgQ2xvY2sgb2YgNjYgTUh6IHlldCBoYXNuJ3QKLSAqIGJlZW4gdGVzdGVkIHdpdGggYSBJUEIgQnVzIENsb2NrIG9mIDY2IE1Iei4KKyAqIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSyBpcyBkZWZpbmVkLiBUaGlzIGlzIGJlY2F1c2UgYSBQQ0kgQ2xvY2sKKyAqIG9mIDY2IE1IeiB5ZXQgaGFzbid0IGJlZW4gdGVzdGVkIHdpdGggYSBJUEIgQnVzIENsb2NrIG9mIDY2IE1Iei4KICAqLwotI2RlZmluZSBDRkdfUENJU1BFRURfNjYJCQkvKiBkZWZpbmUgZm9yIDY2TUh6IHNwZWVkICovCisjZGVmaW5lIENGR19QQ0lDTEtfRVFVQUxTX0lQQkNMS19ESVYyCQkvKiBkZWZpbmUgZm9yIDY2TUh6IHNwZWVkICovCiAjZW5kaWYKIAogLyoKQEAgLTQzMiw3ICs0MzIsNyBAQAogCiAjZGVmaW5lIENGR19CT09UQ1NfU1RBUlQJQ0ZHX0ZMQVNIX0JBU0UKICNkZWZpbmUgQ0ZHX0JPT1RDU19TSVpFCQlDRkdfRkxBU0hfU0laRQotI2lmZGVmIENGR19QQ0lTUEVFRF82NgorI2lmZGVmIENGR19QQ0lDTEtfRVFVQUxTX0lQQkNMS19ESVYyCiAjZGVmaW5lIENGR19CT09UQ1NfQ0ZHCQkweDAwMDhERjMwIC8qIGZvciBwY2lfY2xrICA9IDY2IE1IeiAqLwogI2Vsc2UKICNkZWZpbmUgQ0ZHX0JPT1RDU19DRkcJCTB4MDAwNERGMzAgLyogZm9yIHBjaV9jbGsgPSAzMyBNSHogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UT1A1MjAwLmggYi9pbmNsdWRlL2NvbmZpZ3MvVE9QNTIwMC5oCmluZGV4IGY0MWRiZDAuLjFjYzljZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9UT1A1MjAwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1RPUDUyMDAuaApAQCAtMTg2LDcgKzE4Niw3IEBACiAvKgogICogSVBCIEJ1cyBjbG9ja2luZyBjb25maWd1cmF0aW9uLgogICovCi0jdW5kZWYgQ0ZHX0lQQlNQRUVEXzEzMyAgIAkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KKyN1bmRlZiBDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEsgICAJCS8qIGRlZmluZSBmb3IgMTMzTUh6IHNwZWVkICovCiAKIC8qCiAgKiBJMkMgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1RRTTUyMDAuaCBiL2luY2x1ZGUvY29uZmlncy9UUU01MjAwLmgKaW5kZXggNzA2OWIzNS4uOWRhMWQ4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1RRTTUyMDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvVFFNNTIwMC5oCkBAIC0yMzQsNiArMjM0LDggQEAKICNpZm5kZWYgQ09ORklHX0NBTTUyMDAKICNkZWZpbmUgQ1VTVE9NX0VOVl9TRVRUSU5HUwkJCQkJCVwKIAkiYm9vdGZpbGU9L3RmdHBib290L3RxbTUyMDAvdUltYWdlXDAiCQkJCVwKKwkiYm9vdGZpbGVfZmR0PS90ZnRwYm9vdC90cW01MjAwL3VJbWFnZV9mZHRcMCIJCQlcCisJImZkdF9maWxlPS90ZnRwYm9vdC90cW01MjAwL3RxbTUyMDAuZHRiXDAiCQkJXAogCSJ1LWJvb3Q9L3RmdHBib290L3RxbTUyMDAvdS1ib290LmJpblwwIgogI2Vsc2UKICNkZWZpbmUgQ1VTVE9NX0VOVl9TRVRUSU5HUyAJCQkJCQlcCkBAIC0yNDMsNiArMjQ1LDEwIEBACiAjZW5kaWYKIAogI2RlZmluZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCQlcCisJImNvbnNvbGU9dHR5UzBcMCIJCQkJCQlcCisJImtlcm5lbF9hZGRyPTIwMDAwMFwwIgkJCQkJCVwKKwkiZmR0X2FkZHI9NDAwMDAwXDAiCQkJCQkJXAorCSJob3N0bmFtZT10cW01MjAwXDAiCQkJCQkJXAogCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQlcCiAJInJvb3RwYXRoPS9vcHQvZWxkay9wcGNfNnh4XDAiCQkJCQlcCiAJInJhbWFyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9yYW0gcndcMCIJCQlcCkBAIC0yNTIsMTMgKzI1OCwxNyBAQAogCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IglcCiAJCSI6JHtob3N0bmFtZX06JHtuZXRkZXZ9Om9mZiBwYW5pYz0xXDAiCQkJXAogCSJhZGRjb25zPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiCQkJCVwKLQkJImNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIJCQkJXAorCQkiY29uc29sZT0ke2NvbnNvbGV9LCR7YmF1ZHJhdGV9XDAiCQkJXAogCSJmbGFzaF9zZWxmPXJ1biByYW1hcmdzIGFkZGlwIGFkZGNvbnM7IgkJCQlcCiAJCSJib290bSAke2tlcm5lbF9hZGRyfSAke3JhbWRpc2tfYWRkcn1cMCIJCVwKIAkiZmxhc2hfbmZzPXJ1biBuZnNhcmdzIGFkZGlwIGFkZGNvbnM7IgkJCQlcCiAJCSJib290bSAke2tlcm5lbF9hZGRyfVwwIgkJCQlcCi0JIm5ldF9uZnM9dGZ0cCAyMDAwMDAgJHtib290ZmlsZX07cnVuIG5mc2FyZ3MgYWRkaXAgYWRkY29uczsiCVwKLQkJImJvb3RtXDAiCQkJCQkJXAorCSJuZXRfbmZzPXRmdHAgJHtrZXJuZWxfYWRkcn0gJHtib290ZmlsZX07IgkJCVwKKwkJInJ1biBuZnNhcmdzIGFkZGlwIGFkZGNvbnM7Ym9vdG1cMCIJCQlcCisJIm5ldF9uZnNfZmR0PXRmdHAgJHtrZXJuZWxfYWRkcn0gJHtib290ZmlsZV9mZHR9OyIJCVwKKwkJInRmdHAgJHtmZHRfYWRkcn0gJHtmZHRfZmlsZX07c2V0ZW52IGNvbnNvbGUgdHR5UFNDMDsiCVwKKwkJInJ1biBuZnNhcmdzIGFkZGlwIGFkZGNvbnM7IgkJCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfSAtICR7ZmR0X2FkZHJ9XDAiCQkJXAogCUNVU1RPTV9FTlZfU0VUVElOR1MJCQkJCQlcCiAJImxvYWQ9dGZ0cCAyMDAwMDAgJHt1LWJvb3R9XDAiCQkJCQlcCiAJRU5WX1VQRFQJCQkJCQkJXApAQCAtMjY5LDE3ICsyNzksMTcgQEAKIC8qCiAgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCiAgKi8KLSNkZWZpbmUgQ0ZHX0lQQlNQRUVEXzEzMwkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KKyNkZWZpbmUgQ0ZHX0lQQkNMS19FUVVBTFNfWExCQ0xLCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLwogCi0jaWYgZGVmaW5lZChDRkdfSVBCU1BFRURfMTMzKSAmJiAhZGVmaW5lZChDT05GSUdfQ0FNNTIwMCkKKyNpZiBkZWZpbmVkKENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSykgJiYgIWRlZmluZWQoQ09ORklHX0NBTTUyMDApCiAvKgogICogUENJIEJ1cyBjbG9ja2luZyBjb25maWd1cmF0aW9uCiAgKgogICogQWN0dWFsbHkgYSBQQ0kgQ2xvY2sgb2YgNjYgTUh6IGlzIG9ubHkgc2V0IChpbiBjcHVfaW5pdC5jKSBpZgotICogQ0ZHX0lQQlNQRUVEXzEzMyBpcyBkZWZpbmVkLiBUaGlzIGlzIGJlY2F1c2UgYSBQQ0kgQ2xvY2sgb2YgNjYgTUh6IHlldCBoYXNuJ3QKLSAqIGJlZW4gdGVzdGVkIHdpdGggYSBJUEIgQnVzIENsb2NrIG9mIDY2IE1Iei4KKyAqIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSyBpcyBkZWZpbmVkLiBUaGlzIGlzIGJlY2F1c2UgYSBQQ0kgQ2xvY2sgb2YKKyAqIDY2IE1IeiB5ZXQgaGFzbid0IGJlZW4gdGVzdGVkIHdpdGggYSBJUEIgQnVzIENsb2NrIG9mIDY2IE1Iei4KICAqLwotI2RlZmluZSBDRkdfUENJU1BFRURfNjYJCQkvKiBkZWZpbmUgZm9yIDY2TUh6IHNwZWVkICovCisjZGVmaW5lIENGR19QQ0lDTEtfRVFVQUxTX0lQQkNMS19ESVYyCS8qIGRlZmluZSBmb3IgNjZNSHogc3BlZWQgKi8KICNlbmRpZgogCiAvKgpAQCAtNTk0LDcgKzYwNCw3IEBACiAKICNkZWZpbmUgQ0ZHX0JPT1RDU19TVEFSVAlDRkdfRkxBU0hfQkFTRQogI2RlZmluZSBDRkdfQk9PVENTX1NJWkUJCUNGR19GTEFTSF9TSVpFCi0jaWZkZWYgQ0ZHX1BDSVNQRUVEXzY2CisjaWZkZWYgQ0ZHX1BDSUNMS19FUVVBTFNfSVBCQ0xLX0RJVjIKICNkZWZpbmUgQ0ZHX0JPT1RDU19DRkcJCTB4MDAwOERGMzAgLyogZm9yIHBjaV9jbGsgID0gNjYgTUh6ICovCiAjZWxzZQogI2RlZmluZSBDRkdfQk9PVENTX0NGRwkJMHgwMDA0REYzMCAvKiBmb3IgcGNpX2NsayA9IDMzIE1IeiAqLwpAQCAtNjc2LDQgKzY4NiwxOCBAQAogLyogSW50ZXJ2YWwgYmV0d2VlbiByZWdpc3RlcnMJCQkJCQkgICAgICovCiAjZGVmaW5lIENGR19BVEFfU1RSSURFCQk0CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9wZW4gZmlybXdhcmUgZmxhdCB0cmVlIHN1cHBvcnQKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBDT05GSUdfT0ZfRkxBVF9UUkVFCTEKKyNkZWZpbmUgQ09ORklHX09GX0JPQVJEX1NFVFVQCTEKKworLyogbWF4aW11bSBzaXplIG9mIHRoZSBmbGF0IHRyZWUgKDhLKSAqLworI2RlZmluZSBPRl9GTEFUX1RSRUVfTUFYX1NJWkUJODE5MgorI2RlZmluZSBPRl9DUFUJCQkiUG93ZXJQQyw1MjAwQDAiCisjZGVmaW5lIE9GX1NPQwkJCSJzb2M1MjAwQGYwMDAwMDAwIgorI2RlZmluZSBPRl9UQkNMSwkJKGJkLT5iaV9idXNmcmVxIC8gNCkKKyNkZWZpbmUgT0ZfU1RET1VUX1BBVEgJCSIvc29jNTIwMEBmMDAwMDAwMC9zZXJpYWxAMjAwMCIKKwogI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9Ub3RhbDUyMDAuaCBiL2luY2x1ZGUvY29uZmlncy9Ub3RhbDUyMDAuaAppbmRleCA4MTc1NzAzLi5kODY4NmRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVG90YWw1MjAwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1RvdGFsNTIwMC5oCkBAIC0xODMsNyArMTgzLDcgQEAKIC8qCiAgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCiAgKi8KLSN1bmRlZiBDRkdfSVBCU1BFRURfMTMzICAgCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLworI3VuZGVmIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSyAgIAkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2FjYWRpYS5oIGIvaW5jbHVkZS9jb25maWdzL2FjYWRpYS5oCmluZGV4IDM1YjZhNTEuLjBmNDQ3YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9hY2FkaWEuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYWNhZGlhLmgKQEAgLTM0LDcgKzM0LDkgQEAKICNkZWZpbmUgQ09ORklHX0FDQURJQQkJMQkJLyogQm9hcmQgaXMgQWNhZGlhCSovCiAjZGVmaW5lIENPTkZJR180eHgJCTEJCS8qIC4uLiBQUEM0eHggZmFtaWx5CSovCiAjZGVmaW5lIENPTkZJR180MDVFWgkJMQkJLyogU3BlY2lmYyA0MDVFWiBzdXBwb3J0Ki8KLSNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQk2NjY2NjY2NgkvKiBleHRlcm5hbCBmcmVxIHRvIHBsbAkqLworLyogRGV0ZWN0IEFjYWRpYSBQTEwgaW5wdXQgY2xvY2sgYXV0b21hdGljYWxseSB2aWEgQ1BMRCBiaXQJCSovCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEgICAgKChpbjgoQ0ZHX0NQTERfQkFTRSArIDApID09IDB4MGMpID8gXAorCQkJCTY2NjY2NjY2IDogMzMzMzMwMDApCiAKICNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRiAxCQkvKiBDYWxsIGJvYXJkX2Vhcmx5X2luaXRfZiAqLwogI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX0YJMQkJLyogQ2FsbCBtaXNjX2luaXRfZgkqLwpAQCAtMTA3LDYgKzEwOSw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGTEFTSCByZWxhdGVkCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmICFkZWZpbmVkKENPTkZJR19OQU5EX1VfQk9PVCkgJiYgIWRlZmluZWQoQ09ORklHX05BTkRfU1BMKQogI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkJLyogVGhlIGZsYXNoIGlzIENGSSBjb21wYXRpYmxlCSovCiAjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkvKiBVc2UgY29tbW9uIENGSSBkcml2ZXIJKi8KIApAQCAtMTIwLDYgKzEyMywxMiBAQAogI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSAxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpCSovCiAjZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCQkvKiBwcmludCAnRScgZm9yIGVtcHR5IHNlY3RvciBvbiBmbGluZm8gKi8KIAorI2RlZmluZQlfQ0ZHX0NNRF9JTkNMVURFCShDRkdfQ01EX0FMTCkKKyNlbHNlCisjZGVmaW5lCUNGR19OT19GTEFTSAkJMQkvKiBObyBOT1Igb24gQWNhZGlhIHdoZW4gTkFORC1ib290aW5nCSovCisjZGVmaW5lCV9DRkdfQ01EX0lOQ0xVREUJKChDRkdfQ01EX0FMTCkgJiB+KENGR19DTURfRkxBU0ggfCBDRkdfQ01EX0lNTFMpKQorI2VuZGlmCisKICNpZmRlZiBDRkdfRU5WX0lTX0lOX0ZMQVNICiAjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4NDAwMDAgLyogc2l6ZSBvZiBvbmUgY29tcGxldGUgc2VjdG9yCSovCiAjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19NT05JVE9SX0JBU0UtQ0ZHX0VOVl9TRUNUX1NJWkUpCkBAIC0xMzAsNiArMTM5LDYzIEBACiAjZGVmaW5lIENGR19FTlZfU0laRV9SRURVTkQJKENGR19FTlZfU0laRSkKICNlbmRpZgogCisvKgorICogSVBMIChJbml0aWFsIFByb2dyYW0gTG9hZGVyLCBpbnRlZ3JhdGVkIGluc2lkZSBDUFUpCisgKiBXaWxsIGxvYWQgZmlyc3QgNGsgZnJvbSBOQU5EIChTUEwpIGludG8gY2FjaGUgYW5kIGV4ZWN1dGUgaXQgZnJvbSB0aGVyZS4KKyAqCisgKiBTUEwgKFNlY29uZGFyeSBQcm9ncmFtIExvYWRlcikKKyAqIFdpbGwgbG9hZCBzcGVjaWFsIFUtQm9vdCB2ZXJzaW9uIChOVUIpIGZyb20gTkFORCBhbmQgZXhlY3V0ZSBpdC4gVGhpcyBTUEwKKyAqIGhhcyB0byBmaXQgaW50byA0a0J5dGUuIEl0IHNldHMgdXAgdGhlIENQVSBhbmQgY29uZmlndXJlcyB0aGUgU0RSQU0KKyAqIGNvbnRyb2xsZXIgYW5kIHRoZSBOQU5EIGNvbnRyb2xsZXIgc28gdGhhdCB0aGUgc3BlY2lhbCBVLUJvb3QgaW1hZ2UgY2FuIGJlCisgKiBsb2FkZWQgZnJvbSBOQU5EIHRvIFNEUkFNLgorICoKKyAqIE5VQiAoTkFORCBVLUJvb3QpCisgKiBUaGlzIE5BTkQgVS1Cb290IChOVUIpIGlzIGEgc3BlY2lhbCBVLUJvb3QgdmVyc2lvbiB3aGljaCBjYW4gYmUgc3RhcnRlZAorICogZnJvbSBSQU0uIFRoZXJlZm9yZSBpdCBtdXN0bid0IChyZS0pY29uZmlndXJlIHRoZSBTRFJBTSBjb250cm9sbGVyLgorICoKKyAqIE9uIDQ0MEVQeCB0aGUgU1BMIGlzIGNvcGllZCB0byBTRFJBTSBiZWZvcmUgdGhlIE5BTkQgY29udHJvbGxlciBpcworICogc2V0IHVwLiBXaGlsZSBzdGlsbCBydW5uaW5nIGZyb20gY2FjaGUsIEkgZXhwZXJpZW5jZWQgcHJvYmxlbXMgYWNjZXNzaW5nCisgKiB0aGUgTkFORCBjb250cm9sbGVyLglzciAtIDIwMDYtMDgtMjUKKyAqLworI2RlZmluZSBDRkdfTkFORF9CT09UX1NQTF9TUkMJMHhmZmZmZjAwMAkvKiBTUEwgbG9jYXRpb24JCQkqLworI2RlZmluZSBDRkdfTkFORF9CT09UX1NQTF9TSVpFCSg0IDw8IDEwKQkvKiBTUEwgc2l6ZQkJCSovCisjZGVmaW5lIENGR19OQU5EX0JPT1RfU1BMX0RTVAkoQ0ZHX09DTV9EQVRBX0FERFIgKyAoMTIgPDwgMTApKSAvKiBDb3B5IFNQTCBoZXJlKi8KKyNkZWZpbmUgQ0ZHX05BTkRfVV9CT09UX0RTVAkweDAxMDAwMDAwCS8qIExvYWQgTlVCIHRvIHRoaXMgYWRkcgkqLworI2RlZmluZSBDRkdfTkFORF9VX0JPT1RfU1RBUlQJQ0ZHX05BTkRfVV9CT09UX0RTVCAvKiBTdGFydCBOVUIgZnJvbSB0aGlzIGFkZHIJKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQk9PVF9TUExfREVMVEEJKENGR19OQU5EX0JPT1RfU1BMX1NSQyAtIENGR19OQU5EX0JPT1RfU1BMX0RTVCkKKworLyoKKyAqIERlZmluZSB0aGUgcGFydGl0aW9uaW5nIG9mIHRoZSBOQU5EIGNoaXAgKG9ubHkgUkFNIFUtQm9vdCBpcyBuZWVkZWQgaGVyZSkKKyAqLworI2RlZmluZSBDRkdfTkFORF9VX0JPT1RfT0ZGUwkoMTYgPDwgMTApCS8qIE9mZnNldCB0byBSQU0gVS1Cb290IGltYWdlCSovCisjZGVmaW5lIENGR19OQU5EX1VfQk9PVF9TSVpFCSgzODQgPDwgMTApCS8qIFNpemUgb2YgUkFNIFUtQm9vdCBpbWFnZQkqLworCisvKgorICogTm93IHRoZSBOQU5EIGNoaXAgaGFzIHRvIGJlIGRlZmluZWQgKG5vIGF1dG9kZXRlY3Rpb24gdXNlZCEpCisgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfUEFHRV9TSVpFCTUxMgkJLyogTkFORCBjaGlwIHBhZ2Ugc2l6ZQkJKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQkxPQ0tfU0laRQkoMTYgPDwgMTApCS8qIE5BTkQgY2hpcCBibG9jayBzaXplCQkqLworI2RlZmluZSBDRkdfTkFORF9QQUdFX0NPVU5UCTMyCQkvKiBOQU5EIGNoaXAgcGFnZSBjb3VudAkJKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQkFEX0JMT0NLX1BPUwk1CQkvKiBMb2NhdGlvbiBvZiBiYWQgYmxvY2sgbWFya2VyCSovCisjdW5kZWYgQ0ZHX05BTkRfNF9BRERSX0NZQ0xFCQkJLyogTm8gZm91cnRoIGFkZHIgdXNlZCAoPD0zMk1CKQkqLworCisjZGVmaW5lIENGR19OQU5EX0VDQ1NJWkUJMjU2CisjZGVmaW5lIENGR19OQU5EX0VDQ0JZVEVTCTMKKyNkZWZpbmUgQ0ZHX05BTkRfRUNDU1RFUFMJKENGR19OQU5EX1BBR0VfU0laRSAvIENGR19OQU5EX0VDQ1NJWkUpCisjZGVmaW5lIENGR19OQU5EX09PQlNJWkUJMTYKKyNkZWZpbmUgQ0ZHX05BTkRfRUNDVE9UQUwJKENGR19OQU5EX0VDQ0JZVEVTICogQ0ZHX05BTkRfRUNDU1RFUFMpCisjZGVmaW5lIENGR19OQU5EX0VDQ1BPUwkJezAsIDEsIDIsIDMsIDYsIDd9CisKKyNpZmRlZiBDRkdfRU5WX0lTX0lOX05BTkQKKy8qCisgKiBGb3IgTkFORCBib290aW5nIHRoZSBlbnZpcm9ubWVudCBpcyBlbWJlZGRlZCBpbiB0aGUgVS1Cb290IGltYWdlLiBQbGVhc2UgdGFrZQorICogbG9vayBhdCB0aGUgZmlsZSBib2FyZC9hbWNjL3NlcXVvaWEvdS1ib290LW5hbmQubGRzIGZvciBkZXRhaWxzLgorICovCisjZGVmaW5lIENGR19FTlZfU0laRQkJQ0ZHX05BTkRfQkxPQ0tfU0laRQorI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJKENGR19OQU5EX1VfQk9PVF9PRkZTICsgQ0ZHX0VOVl9TSVpFKQorI2RlZmluZSBDRkdfRU5WX09GRlNFVF9SRURVTkQJKENGR19FTlZfT0ZGU0VUICsgQ0ZHX0VOVl9TSVpFKQorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFJBTSAoQ1JBTSkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMDcsNyArMjczLDExIEBACiAJInVwZGF0ZT1wcm90ZWN0IG9mZiBmZmZjMDAwMCBmZmZmZmZmZjtlcmEgZmZmYzAwMDAgZmZmZmZmZmY7IglcCiAJCSJjcC5iICR7ZmlsZWFkZHJ9IGZmZmMwMDAwICR7ZmlsZXNpemV9OyIJCVwKIAkJInNldGVudiBmaWxlc2l6ZTtzYXZlZW52XDAiCQkJCVwKLQkidXBkPXJ1biBsb2FkO3J1biB1cGRhdGVcMCIJCQkJCVwKKwkidXBkPXJ1biBsb2FkIHVwZGF0ZVwwIgkJCQkJCVwKKwkibmxvYWQ9dGZ0cCAyMDAwMDAgYWNhZGlhL3UtYm9vdC1uYW5kLmJpblwwIgkJCVwKKwkibnVwZGF0ZT1uYW5kIGVyYXNlIDAgNjAwMDA7bmFuZCB3cml0ZSAyMDAwMDAgMCA2MDAwMDsiCQlcCisJCSJzZXRlbnYgZmlsZXNpemU7c2F2ZWVudlwwIgkJCQlcCisJIm51cGQ9cnVuIG5sb2FkIG51cGRhdGVcMCIJCQkJCVwKIAkia296aW89Ym9vdG0gZmZjNjAwMDBcMCIJCQkJCVwKIAkiIgogI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJInJ1biBmbGFzaF9zZWxmIgpAQCAtMjI0LDE2ICsyOTQsNiBAQAogI2RlZmluZSBDT05GSUdfVVNCX09IQ0kKICNkZWZpbmUgQ09ORklHX1VTQl9TVE9SQUdFCiAKLSNpZiAwIC8qIHRlc3Qtb25seSAqLwotI2RlZmluZSBURVNUX09OTFlfTkFORAotI2VuZGlmCi0KLSNpZmRlZiBURVNUX09OTFlfTkFORAotI2RlZmluZSBDTURfTkFORAkJQ0ZHX0NNRF9OQU5ECi0jZWxzZQotI2RlZmluZSBDTURfTkFORAkJMAotI2VuZGlmCi0KIC8qIFBhcnRpdGlvbnMgKi8KICNkZWZpbmUgQ09ORklHX01BQ19QQVJUSVRJT04KICNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KQEAgLTI0MSwyNCArMzAxLDI0IEBACiAKICNkZWZpbmUgQ09ORklHX1NVUFBPUlRfVkZBVAogCi0jZGVmaW5lIENPTkZJR19DT01NQU5EUyAgICAgICAoQ09ORklHX0NNRF9ERkwJfAlcCi0JCQkgICAgICAgQ0ZHX0NNRF9BU0tFTlYJfAlcCi0JCQkgICAgICAgQ0ZHX0NNRF9ESENQCXwJXAotCQkJICAgICAgIENGR19DTURfRFRUCXwJXAotCQkJICAgICAgIENGR19DTURfRElBRwl8CVwKLQkJCSAgICAgICBDRkdfQ01EX0VFUFJPTQl8CVwKLQkJCSAgICAgICBDRkdfQ01EX0VMRgl8CVwKLQkJCSAgICAgICBDRkdfQ01EX0ZBVAl8CVwKLQkJCSAgICAgICBDRkdfQ01EX0kyQwl8CVwKLQkJCSAgICAgICBDRkdfQ01EX0lSUQl8CVwKLQkJCSAgICAgICBDRkdfQ01EX01JSQl8CVwKLQkJCSAgICAgICBDTURfTkFORAkJfAlcCi0JCQkgICAgICAgQ0ZHX0NNRF9ORVQJfAlcCi0JCQkgICAgICAgQ0ZHX0NNRF9ORlMJfAlcCi0JCQkgICAgICAgQ0ZHX0NNRF9QQ0kJfAlcCi0JCQkgICAgICAgQ0ZHX0NNRF9QSU5HCXwJXAotCQkJICAgICAgIENGR19DTURfUkVHSU5GTwl8CVwKLQkJCSAgICAgICBDRkdfQ01EX1VTQikKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCSgoQ09ORklHX0NNRF9ERkwgJiBfQ0ZHX0NNRF9JTkNMVURFKQl8CVwKKwkJCSBDRkdfQ01EX0FTS0VOVgl8CQkJCVwKKwkJCSBDRkdfQ01EX0RIQ1AJfAkJCQlcCisJCQkgQ0ZHX0NNRF9EVFQJfAkJCQlcCisJCQkgQ0ZHX0NNRF9ESUFHCXwJCQkJXAorCQkJIENGR19DTURfRUVQUk9NCXwJCQkJXAorCQkJIENGR19DTURfRUxGCXwJCQkJXAorCQkJIENGR19DTURfRkFUCXwJCQkJXAorCQkJIENGR19DTURfSTJDCXwJCQkJXAorCQkJIENGR19DTURfSVJRCXwJCQkJXAorCQkJIENGR19DTURfTUlJCXwJCQkJXAorCQkJIENGR19DTURfTkFORAl8CQkJCVwKKwkJCSBDRkdfQ01EX05FVAl8CQkJCVwKKwkJCSBDRkdfQ01EX05GUwl8CQkJCVwKKwkJCSBDRkdfQ01EX1BDSQl8CQkJCVwKKwkJCSBDRkdfQ01EX1BJTkcJfAkJCQlcCisJCQkgQ0ZHX0NNRF9SRUdJTkZPIHwJCQkJXAorCQkJIENGR19DTURfVVNCKQogCiAvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCiAjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CkBAIC0zMDAsNyArMzYwLDYgQEAKICAqLwogI2RlZmluZSBDRkdfQk9PVE1BUFNaCQkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCAqLwogCi0jaWZkZWYgVEVTVF9PTkxZX05BTkQKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIE5BTkQgRkxBU0gKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zMDgsNyArMzY3LDYgQEAKICNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCTEKICNkZWZpbmUgQ0ZHX05BTkRfQkFTRQkJKENGR19OQU5EX0FERFIgKyBDRkdfTkFORF9DUykKICNkZWZpbmUgQ0ZHX05BTkRfU0VMRUNUX0RFVklDRSAgMQkvKiBuYW5kIGRyaXZlciBzdXBwb3J0cyBtdXRpcGwuIGNoaXBzCSovCi0jZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ2FjaGUgQ29uZmlndXJhdGlvbgpAQCAtMzIyLDEyICszODAsMTYgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEV4dGVybmFsIEJ1cyBDb250cm9sbGVyIChFQkMpIFNldHVwCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBDRkdfTkFORF9DUwkJMAkJLyogTkFORCBjaGlwIGNvbm5lY3RlZCB0byBDU3gJKi8KLQorI2lmICFkZWZpbmVkKENPTkZJR19OQU5EX1VfQk9PVCkgJiYgIWRlZmluZWQoQ09ORklHX05BTkRfU1BMKQorI2RlZmluZSBDRkdfTkFORF9DUwkJMwogLyogTWVtb3J5IEJhbmsgMCAoRmxhc2gpIGluaXRpYWxpemF0aW9uCQkJCQkJKi8KICNkZWZpbmUgQ0ZHX0VCQ19QQjBBUAkJMHgwMzMzNzIwMAogI2RlZmluZSBDRkdfRUJDX1BCMENSCQkweGZlMGJjMDAwCiAKKy8qIE1lbW9yeSBCYW5rIDMgKE5BTkQtRkxBU0gpIGluaXRpYWxpemF0aW9uCQkJCQkqLworI2RlZmluZSBDRkdfRUJDX1BCM0FQCQkweDAxODAwM2MwCisjZGVmaW5lIENGR19FQkNfUEIzQ1IJCShDRkdfTkFORF9BRERSIHwgMHgxYzAwMCkKKwogLyogSnVzdCBpbml0aWFsIGNvbmZpZ3VyYXRpb24gZm9yIENSQU0uIFdpbGwgYmUgY2hhbmdlZCBpbiBtZW1vcnkuYyB0byBzeW5jIG1vZGUqLwogLyogTWVtb3J5IEJhbmsgMSAoQ1JBTSkgaW5pdGlhbGl6YXRpb24JCQkJCQkqLwogI2RlZmluZSBDRkdfRUJDX1BCMUFQCQkweDAzMDQwMGMwCkBAIC0zMzYsMTAgKzM5OCwyNCBAQAogLyogTWVtb3J5IEJhbmsgMiAoQ1JBTSkgaW5pdGlhbGl6YXRpb24JCQkJCQkqLwogI2RlZmluZSBDRkdfRUJDX1BCMkFQCQkweDAzMDQwMGMwCiAjZGVmaW5lIENGR19FQkNfUEIyQ1IJCTB4MDIwYmMwMDAKKyNlbHNlCisjZGVmaW5lIENGR19OQU5EX0NTCQkwCQkvKiBOQU5EIGNoaXAgY29ubmVjdGVkIHRvIENTeAkqLworLyogTWVtb3J5IEJhbmsgMCAoTkFORC1GTEFTSCkgaW5pdGlhbGl6YXRpb24JCQkJCSovCisjZGVmaW5lIENGR19FQkNfUEIwQVAJCTB4MDE4MDAzYzAKKyNkZWZpbmUgQ0ZHX0VCQ19QQjBDUgkJKENGR19OQU5EX0FERFIgfCAweDFjMDAwKQogCi0vKiBNZW1vcnkgQmFuayAzIChOQU5ELUZMQVNIKSBpbml0aWFsaXphdGlvbgkJCQkJKi8KLSNkZWZpbmUgQ0ZHX0VCQ19QQjNBUAkJMHgwMTgwMDNjMAotI2RlZmluZSBDRkdfRUJDX1BCM0NSCQkoQ0ZHX05BTkRfQUREUiB8IDB4MWMwMDApCisvKgorICogV2hlbiBOQU5ELWJvb3RpbmcgdGhlIENSQU0gRUJDIHNldHVwIG11c3QgYmUgZG9uZSBpbiBzeW5jIG1vZGUsIHNpbmNlIHRoZQorICogTkFORC1TUEwgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUgQ1JBTSBhbmQgRUJDIHRvIHN5bmMgbW9kZS4KKyAqLworLyogTWVtb3J5IEJhbmsgMSAoQ1JBTSkgaW5pdGlhbGl6YXRpb24JCQkJCQkqLworI2RlZmluZSBDRkdfRUJDX1BCMUFQCQkweDlDMDIwMUMwCisjZGVmaW5lIENGR19FQkNfUEIxQ1IJCTB4MDAwYmMwMDAKKworLyogTWVtb3J5IEJhbmsgMiAoQ1JBTSkgaW5pdGlhbGl6YXRpb24JCQkJCQkqLworI2RlZmluZSBDRkdfRUJDX1BCMkFQCQkweDlDMDIwMUMwCisjZGVmaW5lIENGR19FQkNfUEIyQ1IJCTB4MDIwYmMwMDAKKyNlbmRpZgogCiAvKiBNZW1vcnkgQmFuayA0IChDUExEKSBpbml0aWFsaXphdGlvbgkJCQkJCSovCiAjZGVmaW5lIENGR19FQkNfUEI0QVAJCTB4MDQwMDYwMDAKQEAgLTM1MSwxNCArNDI3LDE1IEBACiAgKiBHUElPIFNldHVwCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2RlZmluZSBDRkdfR1BJT19DUkFNX0NMSwk4Ci0jZGVmaW5lIENGR19HUElPX0NSQU1fV0FJVAk5CisjZGVmaW5lIENGR19HUElPX0NSQU1fV0FJVAk5CQkvKiBHUElPLUluCQkqLwogI2RlZmluZSBDRkdfR1BJT19DUkFNX0FEVgkxMAotI2RlZmluZSBDRkdfR1BJT19DUkFNX0NSRQkoMzIgKyAyMSkKKyNkZWZpbmUgQ0ZHX0dQSU9fQ1JBTV9DUkUJKDMyICsgMjEpCS8qIEdQSU8tT3V0CQkqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBEZWZpbml0aW9ucyBmb3IgR1BJT18wIHNldHVwIChQUEM0MDVFWiBzcGVjaWZpYykKICAqCi0gKiBHUElPMFswLTNdCS0gRXh0ZXJuYWwgQnVzIENvbnRyb2xsZXIgQ1NfNCAtIENTXzcgT3V0cHV0cworICogR1BJTzBbMC0yXQktIEV4dGVybmFsIEJ1cyBDb250cm9sbGVyIENTXzQgLSBDU182IE91dHB1dHMKKyAqIEdQSU8wWzNdCS0gTkFORCBGTEFTSCBDb250cm9sbGVyIENFMyAoTkZDRTMpIE91dHB1dAogICogR1BJTzBbNF0JLSBFeHRlcm5hbCBCdXMgQ29udHJvbGxlciBIb2xkIElucHV0CiAgKiBHUElPMFs1XQktIEV4dGVybmFsIEJ1cyBDb250cm9sbGVyIFByaW9yaXR5IElucHV0CiAgKiBHUElPMFs2XQktIEV4dGVybmFsIEJ1cyBDb250cm9sbGVyIEhMREEgT3V0cHV0CkBAIC0zNzQsMTIgKzQ1MSwxMiBAQAogICogR1BJTzBbMjgtMzBdCS0gVHJhY2UgT3V0cHV0cyAvIFBXTSBJbnB1dHMKICAqIEdQSU8wWzMxXQktIFBXTV84IEkvTwogICovCi0jZGVmaW5lIENGR19HUElPMF9UQ1IJCTB4QzAwMDAwMDAKLSNkZWZpbmUgQ0ZHX0dQSU8wX09TUkwJCTB4NTAwMDAwMDAKLSNkZWZpbmUgQ0ZHX0dQSU8wX09TUkgJCTB4MDAwMDAwNTUKLSNkZWZpbmUgQ0ZHX0dQSU8wX0lTUjFMCQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19HUElPMF9UQ1IJCTB4QzBBMDAwMDAKKyNkZWZpbmUgQ0ZHX0dQSU8wX09TUkwJCTB4NTAwMDQ0MDAKKyNkZWZpbmUgQ0ZHX0dQSU8wX09TUkgJCTB4MDIwMDAwNTUKKyNkZWZpbmUgQ0ZHX0dQSU8wX0lTUjFMCQkweDAwMDAxMDAwCiAjZGVmaW5lIENGR19HUElPMF9JU1IxSAkJMHgwMDAwMDA1NQotI2RlZmluZSBDRkdfR1BJTzBfVFNSTAkJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfR1BJTzBfVFNSTAkJMHgwMjAwMDAwMAogI2RlZmluZSBDRkdfR1BJTzBfVFNSSAkJMHgwMDAwMDA1NQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zOTYsMTMgKzQ3MywxMyBAQAogICogR1BJTzFbMTZdCS0gU1BJX1NTXzFfTiBPdXRwdXQKICAqIEdQSU8xWzE3LTIwXQktIFRyYWNlIE91dHB1dC9FeHRlcm5hbCBJbnRlcnJ1cHRzIElSUTAgLSBJUlEzIGlucHV0cwogICovCi0jZGVmaW5lIENGR19HUElPMV9PU1JICQkweDU1NDU1NTU1CisjZGVmaW5lIENGR19HUElPMV9UQ1IJCTB4RkZGRjg0MTQKICNkZWZpbmUgQ0ZHX0dQSU8xX09TUkwJCTB4NDAwMDAxMTAKLSNkZWZpbmUgQ0ZHX0dQSU8xX0lTUjFICQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19HUElPMV9PU1JICQkweDU1NDU1NTU1CiAjZGVmaW5lIENGR19HUElPMV9JU1IxTAkJMHgxNTU1NTQ0NQotI2RlZmluZSBDRkdfR1BJTzFfVFNSSAkJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfR1BJTzFfSVNSMUgJCTB4MDAwMDAwMDAKICNkZWZpbmUgQ0ZHX0dQSU8xX1RTUkwJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQ0ZHX0dQSU8xX1RDUgkJMHhGRkZGODAxNAorI2RlZmluZSBDRkdfR1BJTzFfVFNSSAkJMHgwMDAwMDAwMAogCiAvKgogICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9hZXYuaCBiL2luY2x1ZGUvY29uZmlncy9hZXYuaAppbmRleCA4ZDlmMGExLi5mNmY1MzBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvYWV2LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2Fldi5oCkBAIC0xNjYsMTcgKzE2NiwxNyBAQAogLyoKICAqIElQQiBCdXMgY2xvY2tpbmcgY29uZmlndXJhdGlvbi4KICAqLwotI2RlZmluZSBDRkdfSVBCU1BFRURfMTMzCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLworI2RlZmluZSBDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEsJCS8qIGRlZmluZSBmb3IgMTMzTUh6IHNwZWVkICovCiAKLSNpZiBkZWZpbmVkKENGR19JUEJTUEVFRF8xMzMpCisjaWYgZGVmaW5lZChDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEspCiAvKgogICogUENJIEJ1cyBjbG9ja2luZyBjb25maWd1cmF0aW9uCiAgKgogICogQWN0dWFsbHkgYSBQQ0kgQ2xvY2sgb2YgNjYgTUh6IGlzIG9ubHkgc2V0IChpbiBjcHVfaW5pdC5jKSBpZgotICogQ0ZHX0lQQlNQRUVEXzEzMyBpcyBkZWZpbmVkLiBUaGlzIGlzIGJlY2F1c2UgYSBQQ0kgQ2xvY2sgb2YgNjYgTUh6IHlldCBoYXNuJ3QKLSAqIGJlZW4gdGVzdGVkIHdpdGggYSBJUEIgQnVzIENsb2NrIG9mIDY2IE1Iei4KKyAqIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSyBpcyBkZWZpbmVkLiBUaGlzIGlzIGJlY2F1c2UgYSBQQ0kgQ2xvY2sKKyAqIG9mIDY2IE1IeiB5ZXQgaGFzbid0IGJlZW4gdGVzdGVkIHdpdGggYSBJUEIgQnVzIENsb2NrIG9mIDY2IE1Iei4KICAqLwotI2RlZmluZSBDRkdfUENJU1BFRURfNjYJCQkvKiBkZWZpbmUgZm9yIDY2TUh6IHNwZWVkICovCisjZGVmaW5lIENGR19QQ0lDTEtfRVFVQUxTX0lQQkNMS19ESVYyCS8qIGRlZmluZSBmb3IgNjZNSHogc3BlZWQgKi8KICNlbmRpZgogCiAvKgpAQCAtMzYyLDcgKzM2Miw3IEBACiAKICNkZWZpbmUgQ0ZHX0JPT1RDU19TVEFSVAlDRkdfRkxBU0hfQkFTRQogI2RlZmluZSBDRkdfQk9PVENTX1NJWkUJCUNGR19GTEFTSF9TSVpFCi0jaWZkZWYgQ0ZHX1BDSVNQRUVEXzY2CisjaWZkZWYgQ0ZHX1BDSUNMS19FUVVBTFNfSVBCQ0xLX0RJVjIKICNkZWZpbmUgQ0ZHX0JPT1RDU19DRkcJCTB4MDAwOERGMzAgLyogZm9yIHBjaV9jbGsgID0gNjYgTUh6ICovCiAjZWxzZQogI2RlZmluZSBDRkdfQk9PVENTX0NGRwkJMHgwMDA0REYzMCAvKiBmb3IgcGNpX2NsayA9IDMzIE1IeiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2JhbWJvby5oIGIvaW5jbHVkZS9jb25maWdzL2JhbWJvby5oCmluZGV4IGJjYzczNmMuLjc2M2QxYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9iYW1ib28uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYmFtYm9vLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDA1LTIwMDYKKyAqIChDKSBDb3B5cmlnaHQgMjAwNS0yMDA3CiAgKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTQzLDcgKzQzLDYgQEAKICAqIDJuZCBldGhlcm5ldCBwb3J0IHlvdSBoYXZlIHRvICJ1bmRlZiIgdGhlIGZvbGxvd2luZyBkZWZpbmUuCiAgKi8KICNkZWZpbmUgQ09ORklHX0JBTUJPT19OQU5EICAgICAgMSAgICAgICAvKiBlbmFibGUgbmFuZCBmbGFzaCBzdXBwb3J0ICAgICovCi0jZGVmaW5lIENGR19OQU5EX0xFR0FDWQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBCYXNlIGFkZHJlc3NlcyAtLSBOb3RlIHRoZXNlIGFyZSBlZmZlY3RpdmUgYWRkcmVzc2VzIHdoZXJlIHRoZQpAQCAtNTEsNyArNTAsNyBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCQkoMzg0ICogMTAyNCkJLyogUmVzZXJ2ZSAzODQga0IgZm9yIE1vbml0b3IJKi8KICNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCSgyNTYgKiAxMDI0KQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgbWFsbG9jKCkJKi8KLSNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRQkoLUNGR19NT05JVE9SX0xFTikKKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRQlURVhUX0JBU0UKICNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJICAgICAgICAweDAwMDAwMDAwCSAgICAvKiBfbXVzdF8gYmUgMAkqLwogI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkgICAgICAgIDB4ZmZmMDAwMDAJICAgIC8qIHN0YXJ0IG9mIEZMQVNICSovCiAjZGVmaW5lIENGR19QQ0lfTUVNQkFTRQkgICAgICAgIDB4YTAwMDAwMDAJICAgIC8qIG1hcHBlZCBwY2kgbWVtb3J5Ki8KQEAgLTEwNSwxNCArMTA0LDExIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBFbnZpcm9ubWVudAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gKiBEZWZpbmUgaGVyZSB0aGUgbG9jYXRpb24gb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyAoRkxBU0ggb3IgRUVQUk9NKS4KLSAqIE5vdGU6IERFTlggZW5jb3VyYWdlcyB0byB1c2UgcmVkdW5kYW50IGVudmlyb25tZW50IGluIEZMQVNILgotICovCi0jaWYgMQorI2lmICFkZWZpbmVkKENPTkZJR19OQU5EX1VfQk9PVCkgJiYgIWRlZmluZWQoQ09ORklHX05BTkRfU1BMKQogI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNIICAgICAxCS8qIHVzZSBGTEFTSCBmb3IgZW52aXJvbm1lbnQgdmFycwkqLwogI2Vsc2UKLSNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9FRVBST00JMQkvKiB1c2UgRUVQUk9NIGZvciBlbnZpcm9ubWVudCB2YXJzCSovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fTkFORAkxCS8qIHVzZSBOQU5EIGZvciBlbnZpcm9ubWVudCB2YXJzCSovCisjZGVmaW5lIENGR19FTlZfSVNfRU1CRURERUQJMQkvKiB1c2UgZW1iZWRkZWQgZW52aXJvbm1lbnQgKi8KICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzQsNyArMTMwLDcgQEAKIAogI2lmZGVmIENGR19FTlZfSVNfSU5fRkxBU0gKICNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHgxMDAwMCAJLyogc2l6ZSBvZiBvbmUgY29tcGxldGUgc2VjdG9yCSovCi0jZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19NT05JVE9SX0JBU0UtQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKCgtQ0ZHX01PTklUT1JfTEVOKS1DRkdfRU5WX1NFQ1RfU0laRSkKICNkZWZpbmUJQ0ZHX0VOVl9TSVpFCQkweDIwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KIAogLyogQWRkcmVzcyBhbmQgc2l6ZSBvZiBSZWR1bmRhbnQgRW52aXJvbm1lbnQgU2VjdG9yCSovCkBAIC0xNDIsNjYgKzEzOCw4MCBAQAogI2RlZmluZSBDRkdfRU5WX1NJWkVfUkVEVU5ECShDRkdfRU5WX1NJWkUpCiAjZW5kaWYgLyogQ0ZHX0VOVl9JU19JTl9GTEFTSCAqLwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBOQU5ELUZMQVNIIHJlbGF0ZWQKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lIE5BTkRfQ01EX1JFRyAgICgweDAwKSAvKiBOYW5kRmxhc2ggQ29tbWFuZCBSZWdpc3RlciAqLwotI2RlZmluZSBOQU5EX0FERFJfUkVHICAoMHgwNCkgLyogTmFuZEZsYXNoIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTkFORF9EQVRBX1JFRyAgKDB4MDgpIC8qIE5hbmRGbGFzaCBEYXRhIFJlZ2lzdGVyICovCi0jZGVmaW5lIE5BTkRfRUNDMF9SRUcgICgweDEwKSAvKiBOYW5kRmxhc2ggRUNDIFJlZ2lzdGVyMCAqLwotI2RlZmluZSBOQU5EX0VDQzFfUkVHICAoMHgxNCkgLyogTmFuZEZsYXNoIEVDQyBSZWdpc3RlcjEgKi8KLSNkZWZpbmUgTkFORF9FQ0MyX1JFRyAgKDB4MTgpIC8qIE5hbmRGbGFzaCBFQ0MgUmVnaXN0ZXIyICovCi0jZGVmaW5lIE5BTkRfRUNDM19SRUcgICgweDFDKSAvKiBOYW5kRmxhc2ggRUNDIFJlZ2lzdGVyMyAqLwotI2RlZmluZSBOQU5EX0VDQzRfUkVHICAoMHgyMCkgLyogTmFuZEZsYXNoIEVDQyBSZWdpc3RlcjQgKi8KLSNkZWZpbmUgTkFORF9FQ0M1X1JFRyAgKDB4MjQpIC8qIE5hbmRGbGFzaCBFQ0MgUmVnaXN0ZXI1ICovCi0jZGVmaW5lIE5BTkRfRUNDNl9SRUcgICgweDI4KSAvKiBOYW5kRmxhc2ggRUNDIFJlZ2lzdGVyNiAqLwotI2RlZmluZSBOQU5EX0VDQzdfUkVHICAoMHgyQykgLyogTmFuZEZsYXNoIEVDQyBSZWdpc3RlcjcgKi8KLSNkZWZpbmUgTkFORF9DUjBfUkVHICAgKDB4MzApIC8qIE5hbmRGbGFzaCBEZXZpY2UgQmFuazAgQ29uZmlnIFJlZ2lzdGVyICovCi0jZGVmaW5lIE5BTkRfQ1IxX1JFRyAgICgweDM0KSAvKiBOYW5kRmxhc2ggRGV2aWNlIEJhbmsxIENvbmZpZyBSZWdpc3RlciAqLwotI2RlZmluZSBOQU5EX0NSMl9SRUcgICAoMHgzOCkgLyogTmFuZEZsYXNoIERldmljZSBCYW5rMiBDb25maWcgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTkFORF9DUjNfUkVHICAgKDB4M0MpIC8qIE5hbmRGbGFzaCBEZXZpY2UgQmFuazMgQ29uZmlnIFJlZ2lzdGVyICovCi0jZGVmaW5lIE5BTkRfQ0NSX1JFRyAgICgweDQwKSAvKiBOYW5kRmxhc2ggQ29yZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0jZGVmaW5lIE5BTkRfU1RBVF9SRUcgICgweDQ0KSAvKiBOYW5kRmxhc2ggRGV2aWNlIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBOQU5EX0hXQ1RMX1JFRyAoMHg0OCkgLyogTmFuZEZsYXNoIERpcmVjdCBId2QgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBOQU5EX1JFVklEX1JFRyAoMHg1MCkgLyogTmFuZEZsYXNoIENvcmUgUmV2aXNpb24gSWQgUmVnaXN0ZXIgKi8KKy8qCisgKiBJUEwgKEluaXRpYWwgUHJvZ3JhbSBMb2FkZXIsIGludGVncmF0ZWQgaW5zaWRlIENQVSkKKyAqIFdpbGwgbG9hZCBmaXJzdCA0ayBmcm9tIE5BTkQgKFNQTCkgaW50byBjYWNoZSBhbmQgZXhlY3V0ZSBpdCBmcm9tIHRoZXJlLgorICoKKyAqIFNQTCAoU2Vjb25kYXJ5IFByb2dyYW0gTG9hZGVyKQorICogV2lsbCBsb2FkIHNwZWNpYWwgVS1Cb290IHZlcnNpb24gKE5VQikgZnJvbSBOQU5EIGFuZCBleGVjdXRlIGl0LiBUaGlzIFNQTAorICogaGFzIHRvIGZpdCBpbnRvIDRrQnl0ZS4gSXQgc2V0cyB1cCB0aGUgQ1BVIGFuZCBjb25maWd1cmVzIHRoZSBTRFJBTQorICogY29udHJvbGxlciBhbmQgdGhlIE5BTkQgY29udHJvbGxlciBzbyB0aGF0IHRoZSBzcGVjaWFsIFUtQm9vdCBpbWFnZSBjYW4gYmUKKyAqIGxvYWRlZCBmcm9tIE5BTkQgdG8gU0RSQU0uCisgKgorICogTlVCIChOQU5EIFUtQm9vdCkKKyAqIFRoaXMgTkFORCBVLUJvb3QgKE5VQikgaXMgYSBzcGVjaWFsIFUtQm9vdCB2ZXJzaW9uIHdoaWNoIGNhbiBiZSBzdGFydGVkCisgKiBmcm9tIFJBTS4gVGhlcmVmb3JlIGl0IG11c3RuJ3QgKHJlLSljb25maWd1cmUgdGhlIFNEUkFNIGNvbnRyb2xsZXIuCisgKgorICogT24gNDQwRVB4IHRoZSBTUEwgaXMgY29waWVkIHRvIFNEUkFNIGJlZm9yZSB0aGUgTkFORCBjb250cm9sbGVyIGlzCisgKiBzZXQgdXAuIFdoaWxlIHN0aWxsIHJ1bm5pbmcgZnJvbSBjYWNoZSwgSSBleHBlcmllbmNlZCBwcm9ibGVtcyBhY2Nlc3NpbmcKKyAqIHRoZSBOQU5EIGNvbnRyb2xsZXIuCXNyIC0gMjAwNi0wOC0yNQorICovCisjZGVmaW5lIENGR19OQU5EX0JPT1RfU1BMX1NSQwkweGZmZmZmMDAwCS8qIFNQTCBsb2NhdGlvbgkJCSovCisjZGVmaW5lIENGR19OQU5EX0JPT1RfU1BMX1NJWkUJKDQgPDwgMTApCS8qIFNQTCBzaXplCQkJKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQk9PVF9TUExfRFNUCTB4MDA4MDAwMDAJLyogQ29weSBTUEwgaGVyZQkJKi8KKyNkZWZpbmUgQ0ZHX05BTkRfVV9CT09UX0RTVAkweDAxMDAwMDAwCS8qIExvYWQgTlVCIHRvIHRoaXMgYWRkcgkqLworI2RlZmluZSBDRkdfTkFORF9VX0JPT1RfU1RBUlQJQ0ZHX05BTkRfVV9CT09UX0RTVCAvKiBTdGFydCBOVUIgZnJvbSB0aGlzIGFkZHIJKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQk9PVF9TUExfREVMVEEJKENGR19OQU5EX0JPT1RfU1BMX1NSQyAtIENGR19OQU5EX0JPT1RfU1BMX0RTVCkKIAotLyogTmFuZCBGbGFzaCBLOUYxMjA4VTBBIENvbW1hbmQgU2V0ID0+IE5hbmQgRmxhc2ggMCAqLwotI2RlZmluZSBOQU5EMF9DTURfUkVBRDFfSEFMRjEgICAgIDB4MDAgICAgIC8qIFN0YXJ0aW5nIGFkZHIgZm9yIDFyc3QgaGFsZiBvZiByZWdpc3RlcnMgKi8KLSNkZWZpbmUgTkFORDBfQ01EX1JFQUQxX0hBTEYyICAgICAweDAxICAgICAvKiBTdGFydGluZyBhZGRyIGZvciAybmQgaGFsZiBvZiByZWdpc3RlcnMgKi8KLSNkZWZpbmUgTkFORDBfQ01EX1JFQUQyICAgICAgICAgICAweDUwCi0jZGVmaW5lIE5BTkQwX0NNRF9SRUFEX0lEICAgICAgICAgMHg5MAotI2RlZmluZSBOQU5EMF9DTURfUkVBRF9TVEFUVVMgICAgIDB4NzAKLSNkZWZpbmUgTkFORDBfQ01EX1JFU0VUICAgICAgICAgICAweEZGCi0jZGVmaW5lIE5BTkQwX0NNRF9QQUdFX1BST0cgICAgICAgMHg4MAotI2RlZmluZSBOQU5EMF9DTURfUEFHRV9QUk9HX1RSVUUgIDB4MTAKLSNkZWZpbmUgTkFORDBfQ01EX1BBR0VfUFJPR19EVU1NWSAweDExCi0jZGVmaW5lIE5BTkQwX0NNRF9CTE9DS19FUkFTRSAgICAgMHg2MAotI2RlZmluZSBOQU5EMF9DTURfQkxPQ0tfRVJBU0VfRU5EIDB4RDAKKy8qCisgKiBEZWZpbmUgdGhlIHBhcnRpdGlvbmluZyBvZiB0aGUgTkFORCBjaGlwIChvbmx5IFJBTSBVLUJvb3QgaXMgbmVlZGVkIGhlcmUpCisgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfVV9CT09UX09GRlMJKDE2IDw8IDEwKQkvKiBPZmZzZXQgdG8gUkFNIFUtQm9vdCBpbWFnZQkqLworI2RlZmluZSBDRkdfTkFORF9VX0JPT1RfU0laRQkoMzg0IDw8IDEwKQkvKiBTaXplIG9mIFJBTSBVLUJvb3QgaW1hZ2UJKi8KIAotI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFICAgICAxCS8qIE1heCBudW1iZXIgb2YgTkFORCBkZXZpY2VzICovCi0jZGVmaW5lIFNFQ1RPUlNJWkUgICAgICAgICAgICAgIDUxMgorLyoKKyAqIE5vdyB0aGUgTkFORCBjaGlwIGhhcyB0byBiZSBkZWZpbmVkIChubyBhdXRvZGV0ZWN0aW9uIHVzZWQhKQorICovCisjZGVmaW5lIENGR19OQU5EX1BBR0VfU0laRQk1MTIJCS8qIE5BTkQgY2hpcCBwYWdlIHNpemUJCSovCisjZGVmaW5lIENGR19OQU5EX0JMT0NLX1NJWkUJKDE2IDw8IDEwKQkvKiBOQU5EIGNoaXAgYmxvY2sgc2l6ZQkJKi8KKyNkZWZpbmUgQ0ZHX05BTkRfUEFHRV9DT1VOVAkzMgkJLyogTkFORCBjaGlwIHBhZ2UgY291bnQJCSovCisjZGVmaW5lIENGR19OQU5EX0JBRF9CTE9DS19QT1MJNQkJLyogTG9jYXRpb24gb2YgYmFkIGJsb2NrIG1hcmtlcgkqLworI2RlZmluZSBDRkdfTkFORF80X0FERFJfQ1lDTEUJMQkJLyogRm91cnRoIGFkZHIgdXNlZCAoPjMyTUIpCSovCiAKLSNkZWZpbmUgQUREUl9DT0xVTU4gICAgICAgICAgICAgMQotI2RlZmluZSBBRERSX1BBR0UgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEFERFJfQ09MVU1OX1BBR0UgICAgICAgIDMKKyNkZWZpbmUgQ0ZHX05BTkRfRUNDU0laRQkyNTYKKyNkZWZpbmUgQ0ZHX05BTkRfRUNDQllURVMJMworI2RlZmluZSBDRkdfTkFORF9FQ0NTVEVQUwkoQ0ZHX05BTkRfUEFHRV9TSVpFIC8gQ0ZHX05BTkRfRUNDU0laRSkKKyNkZWZpbmUgQ0ZHX05BTkRfT09CU0laRQkxNgorI2RlZmluZSBDRkdfTkFORF9FQ0NUT1RBTAkoQ0ZHX05BTkRfRUNDQllURVMgKiBDRkdfTkFORF9FQ0NTVEVQUykKKyNkZWZpbmUgQ0ZHX05BTkRfRUNDUE9TCQl7MCwgMSwgMiwgMywgNiwgN30KIAotI2RlZmluZSBOQU5EX0NoaXBJRF9VTktOT1dOICAgICAweDAwCi0jZGVmaW5lIE5BTkRfTUFYX0ZMT09SUyAgICAgICAgIDEKLSNkZWZpbmUgTkFORF9NQVhfQ0hJUFMgICAgICAgICAgMQorI2lmZGVmIENGR19FTlZfSVNfSU5fTkFORAorLyoKKyAqIEZvciBOQU5EIGJvb3RpbmcgdGhlIGVudmlyb25tZW50IGlzIGVtYmVkZGVkIGluIHRoZSBVLUJvb3QgaW1hZ2UuIFBsZWFzZSB0YWtlCisgKiBsb29rIGF0IHRoZSBmaWxlIGJvYXJkL2FtY2Mvc2VxdW9pYS91LWJvb3QtbmFuZC5sZHMgZm9yIGRldGFpbHMuCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQlDRkdfTkFORF9CTE9DS19TSVpFCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkoQ0ZHX05BTkRfVV9CT09UX09GRlMgKyBDRkdfRU5WX1NJWkUpCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUX1JFRFVORAkoQ0ZHX0VOVl9PRkZTRVQgKyBDRkdfRU5WX1NJWkUpCisjZW5kaWYKIAotI2RlZmluZSBXUklURV9OQU5EX0NPTU1BTkQoZCwgYWRyKSBkbyB7Kih2b2xhdGlsZSB1OCAqKSgodWxvbmcpYWRyK05BTkRfQ01EX1JFRykgPSBkO30gd2hpbGUoMCkKLSNkZWZpbmUgV1JJVEVfTkFORF9BRERSRVNTKGQsIGFkcikgZG8geyoodm9sYXRpbGUgdTggKikoKHVsb25nKWFkcitOQU5EX0FERFJfUkVHKSA9IGQ7fSB3aGlsZSgwKQotI2RlZmluZSBXUklURV9OQU5EKGQsIGFkcikgICAgICBkbyB7Kih2b2xhdGlsZSB1OCAqKSgodWxvbmcpYWRyK05BTkRfREFUQV9SRUcpID0gZDt9IHdoaWxlKDApCi0jZGVmaW5lIFJFQURfTkFORChhZHIpICAgICAgICAgICgqKHZvbGF0aWxlIHU4ICopKCh1bG9uZylhZHIrTkFORF9EQVRBX1JFRykpCi0jZGVmaW5lIE5BTkRfV0FJVF9SRUFEWShuYW5kKSAgIHdoaWxlICghKCoodm9sYXRpbGUgdTggKikoKHVsb25nKW5hbmQtPklPX0FERFIrTkFORF9TVEFUX1JFRykgJiAweDAxKSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE5BTkQgRkxBU0gKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJMgorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJQ0ZHX01BWF9OQU5EX0RFVklDRQorI2RlZmluZSBDRkdfTkFORF9CQVNFCQkoQ0ZHX05BTkRfQUREUiArIENGR19OQU5EX0NTKQorI2RlZmluZSBDRkdfTkFORF9CQVNFX0xJU1QJeyBDRkdfTkFORF9CQVNFLCBDRkdfTkFORF9BRERSICsgMiB9CisjZGVmaW5lIENGR19OQU5EX1NFTEVDVF9ERVZJQ0UgIDEJLyogbmFuZCBkcml2ZXIgc3VwcG9ydHMgbXV0aXBsLiBjaGlwcwkqLwogCi0vKiBub3QgbmVlZGVkIHdpdGggNDQwRVAgTkFORCBjb250cm9sbGVyICovCi0jZGVmaW5lIE5BTkRfQ1RMX0NMUkFMRShuYW5kcHRyKQotI2RlZmluZSBOQU5EX0NUTF9TRVRBTEUobmFuZHB0cikKLSNkZWZpbmUgTkFORF9DVExfQ0xSQ0xFKG5hbmRwdHIpCi0jZGVmaW5lIE5BTkRfQ1RMX1NFVENMRShuYW5kcHRyKQotI2RlZmluZSBOQU5EX0RJU0FCTEVfQ0UobmFuZCkKLSNkZWZpbmUgTkFORF9FTkFCTEVfQ0UobmFuZCkKKyNpZiAhZGVmaW5lZChDT05GSUdfTkFORF9VX0JPT1QpICYmICFkZWZpbmVkKENPTkZJR19OQU5EX1NQTCkKKyNkZWZpbmUgQ0ZHX05BTkRfQ1MJCTEKKyNlbHNlCisjZGVmaW5lIENGR19OQU5EX0NTCQkwCQkvKiBOQU5EIGNoaXAgY29ubmVjdGVkIHRvIENTeAkqLworLyogTWVtb3J5IEJhbmsgMCAoTkFORC1GTEFTSCkgaW5pdGlhbGl6YXRpb24JCQkJCSovCisjZGVmaW5lIENGR19FQkNfUEIwQVAJCTB4MDE4MDAzYzAKKyNkZWZpbmUgQ0ZHX0VCQ19QQjBDUgkJKENGR19OQU5EX0FERFIgfCAweDFjMDAwKQorI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEREUiBTRFJBTQpAQCAtMjA5LDcgKzIxOSw4IEBACiAjZGVmaW5lIENPTkZJR19TUERfRUVQUk9NICAgICAgICAgICAgICAgLyogVXNlIFNQRCBFRVBST00gZm9yIHNldHVwICAgICAgICAgICAgICovCiAjdW5kZWYgQ09ORklHX0REUl9FQ0MJCQkvKiBkb24ndCB1c2UgRUNDCQkJKi8KICNkZWZpbmUgQ0ZHX1NJTVVMQVRFX1NQRF9FRVBST00JMHhmZgkvKiBzaW11bGF0ZSBzcGQgZWVwcm9tIG9uIHRoaXMgYWRkcmVzcwkqLwotI2RlZmluZSBTUERfRUVQUk9NX0FERFJFU1MgICAgICB7Q0ZHX1NJTVVMQVRFX1NQRF9FRVBST00sIDB4NTAsIDB4NTF9CisjZGVmaW5lIFNQRF9FRVBST01fQUREUkVTUwl7Q0ZHX1NJTVVMQVRFX1NQRF9FRVBST00sIDB4NTAsIDB4NTF9CisjZGVmaW5lIENGR19NQllURVNfU0RSQU0JKDY0KQkvKiA2NE1CIGZpeGVkIHNpemUgZm9yIGVhcmx5LXNkcmFtLWluaXQgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogSTJDCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvY2FubWIuaCBiL2luY2x1ZGUvY29uZmlncy9jYW5tYi5oCmluZGV4IDJjMTYwYTQuLmVjNmQ1N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9jYW5tYi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9jYW5tYi5oCkBAIC0xMTEsNyArMTExLDcgQEAKIC8qCiAgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCiAgKi8KLSN1bmRlZiBDRkdfSVBCU1BFRURfMTMzICAgCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLworI3VuZGVmIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSyAgIAkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KIAogLyoKICAqIEZsYXNoIGNvbmZpZ3VyYXRpb24sIGV4cGVjdCBvbmUgMTYgTWVnYWJ5dGUgQmFuayBhdCBtb3N0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvY3BjaTUyMDAuaCBiL2luY2x1ZGUvY29uZmlncy9jcGNpNTIwMC5oCmluZGV4IGY5NTg2ZmIuLmY1ZWZjZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9jcGNpNTIwMC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9jcGNpNTIwMC5oCkBAIC0xNzksNyArMTc5LDcgQEAKIC8qCiAgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCiAgKi8KLSN1bmRlZiBDRkdfSVBCU1BFRURfMTMzCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLworI3VuZGVmIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSwkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KICNlbmRpZgogLyoKICAqIEkyQyBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvZGVsdGEuaCBiL2luY2x1ZGUvY29uZmlncy9kZWx0YS5oCmluZGV4IDkxMjg0ZmQuLjE1NjgxMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9kZWx0YS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9kZWx0YS5oCkBAIC0xODgsNyArMTg4LDYgQEAKIC8qCiAgKiBOQU5EIEZsYXNoCiAgKi8KLS8qIFVzZSB0aGUgbmV3IE5BTkQgY29kZS4gKEJPQVJETElCUyA9IGRyaXZlcnMvbmFuZC9saWJuYW5kLmEgcmVxdWlyZWQpICovCiAjdW5kZWYgQ0ZHX05BTkRfTEVHQUNZCiAKICNkZWZpbmUgQ0ZHX05BTkQwX0JBU0UJCTB4MCAvKiAweDQzMTAwMDQwICovIC8qIDB4MTAwMDAwMDAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9obWkxMDAxLmggYi9pbmNsdWRlL2NvbmZpZ3MvaG1pMTAwMS5oCmluZGV4IDA5NWI1ZjYuLjRkODEzZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9obWkxMDAxLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2htaTEwMDEuaApAQCAtMTEwLDcgKzExMCw3IEBACiAvKgogICogSVBCIEJ1cyBjbG9ja2luZyBjb25maWd1cmF0aW9uLgogICovCi0jdW5kZWYgQ0ZHX0lQQlNQRUVEXzEzMwkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KKyN1bmRlZiBDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEsJCS8qIGRlZmluZSBmb3IgMTMzTUh6IHNwZWVkICovCiAKIC8qCiAgKiBJMkMgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2lua2E0eDAuaCBiL2luY2x1ZGUvY29uZmlncy9pbmthNHgwLmgKaW5kZXggNzczZDVkMi4uYWQzY2YwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2lua2E0eDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvaW5rYTR4MC5oCkBAIC0xNDcsNyArMTQ3LDcgQEAKIC8qCiAgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCiAgKi8KLSNkZWZpbmUgQ0ZHX0lQQlNQRUVEXzEzMwkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KKyNkZWZpbmUgQ0ZHX0lQQkNMS19FUVVBTFNfWExCQ0xLCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLwogCiAvKgogICogRmxhc2ggY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2thdG1haS5oIGIvaW5jbHVkZS9jb25maWdzL2thdG1haS5oCmluZGV4IDdmNTUzNjYuLmNjNDdhMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9rYXRtYWkuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mva2F0bWFpLmgKQEAgLTM2MCw3ICszNjAsMTkgQEAKIAkJCQkgRUJDX0JYQ1JfQldfMTZCSVQpCiAKIC8qIE1lbW9yeSBCYW5rIDEgKFhpbGlueCBTeXN0ZW0gQUNFIGNvbnRyb2xsZXIpIGluaXRpYWxpemF0aW9uCQkqLwotI2RlZmluZSBDRkdfRUJDX1BCMUFQCQkweDdGOEZGRTgwCisjZGVmaW5lIENGR19FQkNfUEIxQVAJCShFQkNfQlhBUF9CTUVfRElTQUJMRUQgICAgICB8CQlcCisJCQkJIEVCQ19CWEFQX1RXVF9FTkNPREUoNCkgICAgIHwJCVwKKwkJCQkgRUJDX0JYQVBfQkNFX0RJU0FCTEUgICAgICAgfAkJXAorCQkJCSBFQkNfQlhBUF9CQ1RfMlRSQU5TICAgICAgICB8CQlcCisJCQkJIEVCQ19CWEFQX0NTTl9FTkNPREUoMCkgICAgIHwJCVwKKwkJCQkgRUJDX0JYQVBfT0VOX0VOQ09ERSgwKSAgICAgfAkJXAorCQkJCSBFQkNfQlhBUF9XQk5fRU5DT0RFKDApICAgICB8CQlcCisJCQkJIEVCQ19CWEFQX1dCRl9FTkNPREUoMCkgICAgIHwJCVwKKwkJCQkgRUJDX0JYQVBfVEhfRU5DT0RFKDApICAgICAgfAkJXAorCQkJCSBFQkNfQlhBUF9SRV9ESVNBQkxFRCAgICAgICB8CQlcCisJCQkJIEVCQ19CWEFQX1NPUl9OT05ERUxBWUVEICAgIHwJCVwKKwkJCQkgRUJDX0JYQVBfQkVNX1dSSVRFT05MWSAgICAgfAkJXAorCQkJCSBFQkNfQlhBUF9QRU5fRElTQUJMRUQpCiAjZGVmaW5lIENGR19FQkNfUEIxQ1IJCShFQkNfQlhDUl9CQVNfRU5DT0RFKENGR19BQ0VfQkFTRSkgIHwJXAogCQkJCSBFQkNfQlhDUl9CU18xTUIgICAgICAgICAgICAgICAgICAgIHwJXAogCQkJCSBFQkNfQlhDUl9CVV9SVyAgICAgICAgICAgICAgICAgICAgIHwJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2xwYzIyOTJzb2RpbW0uaCBiL2luY2x1ZGUvY29uZmlncy9scGMyMjkyc29kaW1tLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA3ZTUxNTIzLi43YjZjNjk1Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9scGMyMjkyc29kaW1tLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2xwYzIyOTJzb2RpbW0uaApAQCAtMSwxMiArMSw4IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KLSAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICAqCi0gKiBDb25maWd1YXRpb24gc2V0dGluZ3MgZm9yIHRoZSBFUDczMTIgYm9hcmQuCi0gKgotICogTW9kaWZpZWQgdG8gd29yayBvbiBBcm1hZGlsbG8gSFQxMDcwIEFSTTcyMFQgYm9hcmQKLSAqIChDKSBDb3B5cmlnaHQgMjAwNSBSb3dlbCBBdGllbnphIHJvd2VsQGRpd2FsYWJzLmNvbQorICogQ29uZmlndWF0aW9uIHNldHRpbmdzIGZvciB0aGUgTFBDMjI5MlNPRElNTSBib2FyZCBmcm9tIEVtYmVkZGVkIEFydGlzdHMuCiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCkBAIC0zMSw3ICsyNyw3IEBACiAjZGVmaW5lIF9fQ09ORklHX0gKIAogLyoKLSAqIElmIHdlIGFyZSBkZXZlbG9waW5nLCB3ZSBtaWdodCB3YW50IHRvIHN0YXJ0IGFybWJvb3QgZnJvbSByYW0KKyAqIElmIHdlIGFyZSBkZXZlbG9waW5nLCB3ZSBtaWdodCB3YW50IHRvIHN0YXJ0IHUtYm9vdCBmcm9tIHJhbQogICogc28gd2UgTVVTVCBOT1QgaW5pdGlhbGl6ZSBjcml0aWNhbCByZWdzIGxpa2UgbWVtLXRpbWluZyAuLi4KICAqLwogI3VuZGVmIENPTkZJR19JTklUX0NSSVRJQ0FMCQkvKiB1bmRlZiBmb3IgZGV2ZWxvcGluZyAqLwpAQCAtNDYsNyArNDIsNyBAQAogI2RlZmluZSBDT05GSUdfQVJNNwkJMQkvKiBUaGlzIGlzIGEgQVJNNyBDUFUJKi8KICNkZWZpbmUgQ09ORklHX0FSTV9USFVNQgkxCS8qIHRoaXMgaXMgYW4gQVJNNzIwVERNSSAqLwogI2RlZmluZSBDT05GSUdfTFBDMjI5MgotI3VuZGVmICBDT05GSUdfQVJNN19SRVZECSAJLyogZGlzYWJsZSBBUk03MjAgUkVWLkQgV29ya2Fyb3VuZHMgKi8KKyN1bmRlZglDT05GSUdfQVJNN19SRVZECQkvKiBkaXNhYmxlIEFSTTcyMCBSRVYuRCBXb3JrYXJvdW5kcyAqLwogCiAjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkvKiBkb24ndCBuZWVkIHRoZW0gYW55bW9yZSAqLwogCkBAIC03MCw3ICs2Niw3IEBACiAKICNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKIAotI2RlZmluZSBDT05GSUdfQk9PVFBfTUFTSyAgICAgICAoQ09ORklHX0JPT1RQX0RFRkFVTFR8Q09ORklHX0JPT1RQX0JPT1RGSUxFU0laRSkKKyNkZWZpbmUgQ09ORklHX0JPT1RQX01BU0sJKENPTkZJR19CT09UUF9ERUZBVUxUfENPTkZJR19CT09UUF9CT09URklMRVNJWkUpCiAKIC8qCiAgKiBTdXBwb3J0ZWQgY29tbWFuZHMKQEAgLTEwMywxMSArOTksMTIgQEAKICNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHg0MDAwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCiAjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHg0MDAwMDAwMAkvKiA0IC4uLiA4IE1CIGluIERSQU0JKi8KIAotI3VuZGVmICBDRkdfQ0xLU19JTl9IWgkJLyogZXZlcnl0aGluZywgaW5jbCBib2FyZCBpbmZvLCBpbiBIeiAqLworI3VuZGVmCUNGR19DTEtTX0lOX0haCQkvKiBldmVyeXRoaW5nLCBpbmNsIGJvYXJkIGluZm8sIGluIEh6ICovCiAKLSNkZWZpbmUJQ0ZHX0xPQURfQUREUgkJMHgwMDA0MDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcwlmb3IgYXJtYWRpbGxvOiBrZXJuZWwgaW1nIGlzIGhlcmUqLworI2RlZmluZQlDRkdfTE9BRF9BRERSCQkweDAwMDQwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzCWZvcgkqLworCQkJCQkJLyogYXJtYWRpbGxvOiBrZXJuZWwgaW1nIGlzIGhlcmUqLwogCi0jZGVmaW5lIENGR19TWVNfQ0xLX0ZSRVEgICAgICAgIDU4OTgyNDAwICAgICAgICAvKiBIeiAqLworI2RlZmluZSBDRkdfU1lTX0NMS19GUkVRCTU4OTgyNDAwCS8qIEh6ICovCiAjZGVmaW5lCUNGR19IWgkJCTIwNDgJCS8qIGRlY3JlbWVudGVyIGZyZXEgaW4gSHogKi8KIAogCQkJCQkJLyogdmFsaWQgYmF1ZHJhdGVzICovCkBAIC0xNTQsNSArMTUxLDcgQEAKICNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCiAjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCiAjZGVmaW5lIENPTkZJR19NTUMgMQorLyogd2UgdXNlIHRoaXMgZXRoZXJuZXQgY2hpcCAqLworI2RlZmluZSBDT05GSUdfRU5DMjhKNjAKIAogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9sdWFuLmggYi9pbmNsdWRlL2NvbmZpZ3MvbHVhbi5oCmluZGV4IDljODc2OWIuLjA0NWExNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9sdWFuLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2x1YW4uaApAQCAtMTM1LDcgKzEzNSw4IEBACiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2RlZmluZSBDT05GSUdfU1BEX0VFUFJPTQkxCS8qIFVzZSBTUEQgRUVQUk9NIGZvciBzZXR1cAkqLwogI2RlZmluZSBTUERfRUVQUk9NX0FERFJFU1MJezB4NTMsIDB4NTJ9CS8qIFNQRCBpMmMgc3BkIGFkZHJlc3NlcyovCi0jdW5kZWYgQ09ORklHX0REUl9FQ0MJCQkvKiBubyBFQ0Mgc3VwcG9ydCBmb3Igbm93CSovCisjZGVmaW5lIENPTkZJR19ERFJfRUNDCQkxCS8qIHdpdGggRUNDIHN1cHBvcnQJCSovCisjZGVmaW5lIENGR180NHhfRERSMl9DS1RSXzE4MAkxCS8qIHVzZSAxODAgZGVnIGFkdmFuY2UJCSovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEkyQwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL21jYzIwMC5oIGIvaW5jbHVkZS9jb25maWdzL21jYzIwMC5oCmluZGV4IDYyMWE4MWMuLmMyMzI0YTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9tY2MyMDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbWNjMjAwLmgKQEAgLTE2OSw3ICsxNjksNyBAQAogLyoKICAqIElQQiBCdXMgY2xvY2tpbmcgY29uZmlndXJhdGlvbi4KICAqLwotI2RlZmluZSBDRkdfSVBCU1BFRURfMTMzCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLworI2RlZmluZSBDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEsJCS8qIGRlZmluZSBmb3IgMTMzTUh6IHNwZWVkICovCiAKIC8qCiAgKiBJMkMgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL21sNDAxLmggYi9pbmNsdWRlL2NvbmZpZ3MvbWw0MDEuaAppbmRleCBjYjE1OWU3Li4zZGIyODc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvbWw0MDEuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbWw0MDEuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIi4uL2JvYXJkL3hpbGlueC9tbDQwMS94cGFyYW1ldGVycy5oIgogCiAjZGVmaW5lCUNPTkZJR19NSUNST0JMQVpFCTEJLyogTWljcm9CbGF6ZSBDUFUgKi8KKyNkZWZpbmUJTUlDUk9CTEFaRV9WNQkJMQogI2RlZmluZQlDT05GSUdfTUw0MDEJCTEJLyogTUw0MDEgQm9hcmQgKi8KIAogLyogdWFydCAqLwpAQCAtMzYsMTEgKzM3LDExIEBACiAjZGVmaW5lCUNGR19CQVVEUkFURV9UQUJMRQl7IENPTkZJR19CQVVEUkFURSB9CiAKIC8qIHNldHRpbmcgcmVzZXQgYWRkcmVzcyAqLwotI2RlZmluZQlDRkdfUkVTRVRfQUREUkVTUwlURVhUX0JBU0UKKy8qI2RlZmluZQlDRkdfUkVTRVRfQUREUkVTUwlURVhUX0JBU0UqLwogCiAvKiBldGhlcm5ldCAqLwogI2RlZmluZSBDT05GSUdfRU1BQ0xJVEUJCTEKLSNkZWZpbmUgWFBBUl9FTUFDXzBfREVWSUNFX0lECVhQQVJfWEVNQUNfTlVNX0lOU1RBTkNFUworI2RlZmluZSBYUEFSX0VNQUNfMF9ERVZJQ0VfSUQJWFBBUl9PUEJfRVRIRVJORVRfMF9ERVZJQ0VfSUQKIAogLyogZ3BpbyAqLwogI2RlZmluZQlDRkdfR1BJT18wCQkxCkBAIC01OCw2ICs1OSwxMCBAQAogI2RlZmluZQlGUkVRVUVOQ0UJCVhJTElOWF9DTE9DS19GUkVRCiAjZGVmaW5lCUNGR19USU1FUl8wX1BSRUxPQUQJKCBGUkVRVUVOQ0UvMTAwMCApCiAKKy8qIEZTTCAqLworI2RlZmluZQlDRkdfRlNMXzIKKyNkZWZpbmUJRlNMX0lOVFJfMgkxCisKIC8qCiAgKiBtZW1vcnkgbGF5b3V0IC0gRXhhbXBsZQogICogVEVYVF9CQVNFID0gMHgxMjAwXzAwMDA7CkBAIC05Myw3ICs5OCw4IEBACiAKIC8qIGdsb2JhbCBwb2ludGVyICovCiAjZGVmaW5lCUNGR19HQkxfREFUQV9TSVpFCTB4MTAwMAkvKiBzaXplIG9mIGdsb2JhbCBkYXRhICovCi0jZGVmaW5lCUNGR19HQkxfREFUQV9PRkZTRVQgICAgIChDRkdfU0RSQU1fQkFTRSArIENGR19TRFJBTV9TSVpFIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpIC8qIHN0YXJ0IG9mIGdsb2JhbCBkYXRhICovCisvKiBzdGFydCBvZiBnbG9iYWwgZGF0YSAqLworI2RlZmluZQlDRkdfR0JMX0RBVEFfT0ZGU0VUICAgICAoQ0ZHX1NEUkFNX0JBU0UgKyBDRkdfU0RSQU1fU0laRSAtIENGR19HQkxfREFUQV9TSVpFKQogCiAvKiBtb25pdG9yIGNvZGUgKi8KICNkZWZpbmUJU0laRQkJCTB4NDAwMDAKQEAgLTExNyw2ICsxMjMsNyBAQAogCSNkZWZpbmUJQ0ZHX0ZMQVNIX0VNUFRZX0lORk8JMQkvKiA/ZW1wdHkgc2VjdG9yICovCiAJI2RlZmluZQlDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgKi8KIAkjZGVmaW5lCUNGR19NQVhfRkxBU0hfU0VDVAkxMjgJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisJI2RlZmluZQlDRkdfRkxBU0hfUFJPVEVDVElPTgkJLyogaGFyZHdhcmUgZmxhc2ggcHJvdGVjdGlvbiAqLwogCiAJI2lmZGVmCVJBTUVOVgogCQkjZGVmaW5lCUNGR19FTlZfSVNfTk9XSEVSRQkxCkBAIC0xMzUsNiArMTQyLDcgQEAKIAkjZGVmaW5lCUNGR19FTlZfSVNfTk9XSEVSRQkxCiAJI2RlZmluZQlDRkdfRU5WX1NJWkUJCTB4MTAwMAogCSNkZWZpbmUJQ0ZHX0VOVl9BRERSCQkoQ0ZHX01PTklUT1JfQkFTRSAtIENGR19FTlZfU0laRSkKKwkjZGVmaW5lCUNGR19GTEFTSF9QUk9URUNUSU9OCQkvKiBoYXJkd2FyZSBmbGFzaCBwcm90ZWN0aW9uICovCiAjZW5kaWYgLyogIUZMQVNIICovCiAKICNpZmRlZglGTEFTSApAQCAtMTUyLDggKzE2MCwxMyBAQAogCQkJCUNGR19DTURfSU1JIHxcCiAJCQkJQ0ZHX0NNRF9ORVQgfFwKIAkJCQlDRkdfQ01EX0NBQ0hFIHxcCisJCQkJQ0ZHX0NNRF9GQVQgfFwKKwkJCQlDRkdfQ01EX0VYVDIgfFwKKwkJCQlDRkdfQ01EX0pGRlMyIHxcCisJCQkJQ0ZHX0NNRF9FQ0hPIHxcCiAJCQkJQ0ZHX0NNRF9JTUxTIHxcCiAJCQkJQ0ZHX0NNRF9GTEFTSCB8XAorCQkJCUNGR19DTURfTUZTTCB8XAogCQkJCUNGR19DTURfUElORyBcCiAJCQkJKQogCSNlbHNlCS8qICFSQU1FTlYgKi8KQEAgLTE3NCw2ICsxODcsMTEgQEAKIAkJCQlDRkdfQ01EX0ZMQVNIIHxcCiAJCQkJQ0ZHX0NNRF9QSU5HIHxcCiAJCQkJQ0ZHX0NNRF9FTlYgfFwKKwkJCQlDRkdfQ01EX0ZBVCB8XAorCQkJCUNGR19DTURfRVhUMiB8XAorCQkJCUNGR19DTURfSkZGUzIgfFwKKwkJCQlDRkdfQ01EX0VDSE8gfFwKKwkJCQlDRkdfQ01EX01GU0wgfFwKIAkJCQlDRkdfQ01EX1NBVkVTIFwKIAkJCQkpCiAKQEAgLTE4OSwxNiArMjA3LDMwIEBACiAJCQkJQ0ZHX0NNRF9CREkgfFwKIAkJCQlDRkdfQ01EX1JVTiB8XAogCQkJCUNGR19DTURfTE9BRFMgfFwKKwkJCQlDRkdfQ01EX0ZBVCB8XAorCQkJCUNGR19DTURfRVhUMiB8XAogCQkJCUNGR19DTURfTE9BREIgfFwKIAkJCQlDRkdfQ01EX0lNSSB8XAogCQkJCUNGR19DTURfTkVUIHxcCiAJCQkJQ0ZHX0NNRF9DQUNIRSB8XAorCQkJCUNGR19DTURfTUZTTCB8XAogCQkJCUNGR19DTURfUElORyBcCiAJCQkJKQogI2VuZGlmCS8qICFGTEFTSCAqLwogLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLwogI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgogCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSkZGUzIpCisvKiBKRkZTMiBwYXJ0aXRpb25zICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCS8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1tbDQwMS0wIgorCisvKiBkZWZhdWx0IG10ZCBwYXJ0aXRpb24gdGFibGUgKi8KKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9bWw0MDEtMDoyNTZrKHUtYm9vdCksIlwKKwkJCQkiMjU2ayhlbnYpLDNtKGtlcm5lbCksMW0ocm9tZnMpLCJcCisJCQkJIjFtKGNyYW1mcyksLShqZmZzMikiCisjZW5kaWYKKwogLyogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucyAqLwogI2RlZmluZQlDRkdfUFJPTVBUCSJVLUJvb3QtbU9OU3RSPiAiCiAjZGVmaW5lCUNGR19DQlNJWkUJNTEyCS8qIHNpemUgb2YgY29uc29sZSBidWZmZXIgKi8KQEAgLTIwNyw3ICsyMzksNyBAQAogI2RlZmluZQlDRkdfTE9OR0hFTFAKICNkZWZpbmUJQ0ZHX0xPQURfQUREUgkweDEyMDAwMDAwIC8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCiAKLSNkZWZpbmUJQ09ORklHX0JPT1RERUxBWSAJMzAKKyNkZWZpbmUJQ09ORklHX0JPT1RERUxBWQkzMAogI2RlZmluZQlDT05GSUdfQk9PVEFSR1MJCSJyb290PXJvbWZzIgogI2RlZmluZQlDT05GSUdfSE9TVE5BTUUJCSJtbDQwMSIKICNkZWZpbmUJQ09ORklHX0JPT1RDT01NQU5EIAkiYmFzZSAwO3RmdHAgMTEwMDAwMDAgaW1hZ2UuaW1nO2Jvb3RtIgpAQCAtMjIxLDEwICsyNTMsMTkgQEAKICNkZWZpbmUgQ0ZHX0haCTEwMDAKIAogLyogc3lzdGVtIGFjZSAqLwotLyojZGVmaW5lIENPTkZJR19TWVNURU1BQ0UKLSNkZWZpbmUgREVCVUdfU1lTVEVNQUNFCi0jZGVmaW5lIENGR19TWVNURU1BQ0VfQkFTRQlYSUxJTlhfU1lTQUNFX0JBU0VBRERSCi0jZGVmaW5lIENGR19TWVNURU1BQ0VfV0lEVEgJWElMSU5YX1NZU0FDRV9NRU1fV0lEVEgKLSNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KLSovCisjZGVmaW5lCUNPTkZJR19TWVNURU1BQ0UKKy8qICNkZWZpbmUgREVCVUdfU1lTVEVNQUNFICovCisjZGVmaW5lCVNZU1RFTUFDRV9DT05GSUdfRlBHQQorI2RlZmluZQlDRkdfU1lTVEVNQUNFX0JBU0UJWElMSU5YX1NZU0FDRV9CQVNFQUREUgorI2RlZmluZQlDRkdfU1lTVEVNQUNFX1dJRFRICVhJTElOWF9TWVNBQ0VfTUVNX1dJRFRICisjZGVmaW5lCUNPTkZJR19ET1NfUEFSVElUSU9OCisKKyNkZWZpbmUJQ09ORklHX1BSRUJPT1QJCSJlY2hvIFUtQk9PVCBmb3IgTUw0MDE7c2V0ZW52IHByZWJvb3Q7ZWNobyIKKworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCSJ1bmxvY2s9eWVzXDAiIC8qIGhhcmR3YXJlIGZsYXNoIHByb3RlY3Rpb24gKi9cCisJCQkJCSJub3IwPW1sNDAxLTBcMCJcCisJCQkJCSJtdGRwYXJ0cz1tdGRwYXJ0cz1tbDQwMS0wOiJcCisJCQkJCSIyNTZrKHUtYm9vdCksMjU2ayhlbnYpLDNtKGtlcm5lbCksIlwKKwkJCQkJIjFtKHJvbWZzKSwxbShjcmFtZnMpLC0oamZmczIpXDAiCisKICNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbW90aW9ucHJvLmggYi9pbmNsdWRlL2NvbmZpZ3MvbW90aW9ucHJvLmgKaW5kZXggNTMyOGU4ZC4uZTM4OTlhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL21vdGlvbnByby5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9tb3Rpb25wcm8uaApAQCAtMjYsMTIgKzI2LDEwIEBACiAjaWZuZGVmIF9fQ09ORklHX0gKICNkZWZpbmUgX19DT05GSUdfSAogCi0KIC8qCiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICovCiAKLQogLyogQ1BVIGFuZCBib2FyZCAqLwogI2RlZmluZSBDT05GSUdfTVBDNXh4eAkJMQkvKiBUaGlzIGlzIGFuIE1QQzV4eHggQ1BVICovCiAjZGVmaW5lIENPTkZJR19NUEM1MjAwCQkxCS8qIE1vcmUgZXhhY3RseSBhIE1QQzUyMDAgKi8KQEAgLTUwLDcgKzQ4LDE0IEBACiAJCQkJQ0ZHX0NNRF9NSUkJfCBcCiAJCQkJQ0ZHX0NNRF9CRURCVUcJfCBcCiAJCQkJQ0ZHX0NNRF9ORVQJfCBcCi0JCQkJQ0ZHX0NNRF9QSU5HKQorCQkJCUNGR19DTURfUElORwl8IFwKKwkJCQlDRkdfQ01EX0lERQl8IFwKKwkJCQlDRkdfQ01EX0ZBVAl8IFwKKwkJCQlDRkdfQ01EX0pGRlMyCXwgXAorCQkJCUNGR19DTURfSTJDCXwgXAorCQkJCUNGR19DTURfREFURQl8IFwKKwkJCQlDRkdfQ01EX0VFUFJPTQl8IFwKKwkJCQlDRkdfQ01EX0RUVCkKIAogLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLwogI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgpAQCAtNzEsNyArNzYsNyBAQAogI2RlZmluZSBDT05GSUdfTVBDNXh4eF9GRUMJMQogI2RlZmluZSBDT05GSUdfUEhZX0FERFIJCTB4MgogI2RlZmluZSBDT05GSUdfUEhZX1RZUEUJCTB4NzljODc0Ci0KKyNkZWZpbmUgQ09ORklHX1JFU0VUX1BIWV9SCTEKIAogLyoKICAqIEF1dG9ib290aW5nCkBAIC05NCw0MiArOTksNTEgQEAKICAqIERlZmF1bHQgZW52aXJvbm1lbnQgc2V0dGluZ3MKICAqLwogI2RlZmluZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCQlcCi0JInNkcmFtX3Rlc3Q9MFwwIgkJCQkJCVwKIAkibmV0ZGV2PWV0aDBcMCIJCQkJCQkJXAogCSJob3N0bmFtZT1tb3Rpb25wcm9cMCIJCQkJCQlcCiAJIm5ldG1hc2s9MjU1LjI1NS4wLjBcMCIJCQkJCQlcCiAJImlwYWRkcj0xOTIuMTY4LjE2MC4yMlwwIgkJCQkJXAogCSJzZXJ2ZXJpcD0xOTIuMTY4LjEuMVwwIgkJCQkJXAogCSJnYXRld2F5aXA9MTkyLjE2OC4xLjFcMCIJCQkJCVwKLQkia2VybmVsX2FkZHI9MjAwMDAwXDAiCQkJCQkJXAorCSJjb25zb2xlPXR0eVBTQzAsMTE1MjAwXDAiCQkJCQlcCiAJInUtYm9vdF9hZGRyPTEwMDAwMFwwIgkJCQkJCVwKLQkia2VybmVsX3NlY3Rvcj0yMFwwIgkJCQkJCVwKLQkia2VybmVsX3NpemU9MTAwMFwwIgkJCQkJCVwKLQkiY29uc29sZT10dHlTMCwxMTUyMDBcMCIJCQkJCVwKKwkia2VybmVsX2FkZHI9MjAwMDAwXDAiCQkJCQkJXAorCSJmZHRfYWRkcj00MDAwMDBcMCIJCQkJCQlcCisJInJhbWRpc2tfYWRkcj01MDAwMDBcMCIJCQkJCQlcCisJIm11bHRpX2ltYWdlX2FkZHI9ODAwMDAwXDAiCQkJCQlcCiAJInJvb3RwYXRoPS9vcHQvZWxkay00LjEvcHBjXzZ4eFwwIgkJCQlcCi0JImJvb3RmaWxlPS90ZnRwYm9vdC9tb3Rpb25wcm8vdUltYWdlXDAiCQkJCVwKIAkidS1ib290PS90ZnRwYm9vdC9tb3Rpb25wcm8vdS1ib290LmJpblwwIgkJCVwKLQkibG9hZD10ZnRwICQodS1ib290X2FkZHIpICQodS1ib290KVwwIgkJCQlcCisJImJvb3RmaWxlPS90ZnRwYm9vdC9tb3Rpb25wcm8vdUltYWdlXDAiCQkJCVwKKwkiZmR0X2ZpbGU9L3RmdHBib290L21vdGlvbnByby9tb3Rpb25wcm8uZHRiXDAiCQkJXAorCSJyYW1kaXNrX2ZpbGU9L3RmdHBib290L21vdGlvbnByby91UmFtZGlza1wwIgkJCVwKKwkibXVsdGlfaW1hZ2VfZmlsZT1rZXJuZWwraW5pdHJkK2R0Yi5pbWdcMCIJCQlcCisJImxvYWQ9dGZ0cCAke3UtYm9vdF9hZGRyfSAke3UtYm9vdH1cMCIJCQkJXAogCSJ1cGRhdGU9cHJvdCBvZmYgZmZmMDAwMDAgZmZmM2ZmZmY7IGVyYSBmZmYwMDAwMCBmZmYzZmZmZjsgIglcCi0JCSJjcC5iICQodS1ib290X2FkZHIpIGZmZjAwMDAwICQoZmlsZXNpemUpOyIJCVwKKwkJImNwLmIgJHt1LWJvb3RfYWRkcn0gZmZmMDAwMDAgJHtmaWxlc2l6ZX07IgkJXAogCQkicHJvdCBvbiBmZmYwMDAwMCBmZmYzZmZmZlwwIgkJCQlcCiAJInJhbWFyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9yYW0gcndcMCIJCQlcCi0JImFkZGlwPXNldGVudiBib290YXJncyAkKGJvb3RhcmdzKSBjb25zb2xlPSQoY29uc29sZSkgIgkJXAotCQkiaXA9JChpcGFkZHIpOiQoc2VydmVyaXApOiQoZ2F0ZXdheWlwKToiCQlcCi0JCSIkKG5ldG1hc2spOiQoaG9zdG5hbWUpOiQobmV0ZGV2KTpvZmYgcGFuaWM9MVwwIglcCi0JImZsYXNoX25mcz1ydW4gbmZzYXJncyBhZGRpcDtib290bSAkKGtlcm5lbF9hZGRyKVwwIgkJXAotCSJmbGFzaF9zZWxmPXJ1biByYW1hcmdzIGFkZGlwO2Jvb3RtICQoa2VybmVsX2FkZHIpICIJCVwKLQkJIiQocmFtZGlza19hZGRyKVwwIgkJCQkJXAotCSJuZXRfbmZzPXRmdHAgJChrZXJuZWxfYWRkcikgJChib290ZmlsZSk7IHJ1biBuZnNhcmdzIGFkZGlwOyAiCVwKLQkJImJvb3RtICQoa2VybmVsX2FkZHIpXDAiCQkJCVwKIAkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQkJXAotCQkibmZzcm9vdD0kKHNlcnZlcmlwKTokKHJvb3RwYXRoKVwwIgkJCVwKLQkiZnN0eXBlPWV4dDNcMCIJCQkJCQkJXAotCSJmYXRhcmdzPXNldGVudiBib290YXJncyBpbml0PS9saW51eHJjIHJ3XDAiCQkJXAorCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCVwKKwkiZmF0X2FyZ3M9c2V0ZW52IGJvb3RhcmdzIHJ3XDAiCQkJCQlcCisJImFkZG10ZD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gJHttdGRwYXJ0c31cMCIJCVwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIJCQkJXAorCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToiCQlcCisJCSIke25ldG1hc2t9OiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmYgcGFuaWM9MSAiCQlcCisJCSJjb25zb2xlPSR7Y29uc29sZX1cMCIJCQkJCVwKKwkibmV0X25mcz10ZnRwICR7a2VybmVsX2FkZHJ9ICR7Ym9vdGZpbGV9OyAiCQkJXAorCQkidGZ0cCAke2ZkdF9hZGRyfSAke2ZkdF9maWxlfTsgcnVuIG5mc2FyZ3MgYWRkaXA7ICIJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn0gLSAke2ZkdF9hZGRyfVwwIgkJCVwKKwkibmV0X3NlbGY9dGZ0cCAke2tlcm5lbF9hZGRyfSAke2Jvb3RmaWxlfTsgIgkJCVwKKwkJInRmdHAgJHtmZHRfYWRkcn0gJHtmZHRfZmlsZX07ICIJCQlcCisJCSJ0ZnRwICR7cmFtZGlza19hZGRyfSAke3JhbWRpc2tfZmlsZX07ICIJCVwKKwkJInJ1biByYW1hcmdzIGFkZGlwOyAiCQkJCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfSAke3JhbWRpc2tfYWRkcn0gJHtmZHRfYWRkcn1cMCIJXAorCSJmYXRfbXVsdGk9cnVuIGZhdF9hcmdzIGFkZGlwOyBmYXRsb2FkIGlkZSAwOjEgIgkJXAorCQkiJHttdWx0aV9pbWFnZV9hZGRyfSAke211bHRpX2ltYWdlX2ZpbGV9OyAiCQlcCisJCSJib290bSAke211bHRpX2ltYWdlX2FkZHJ9XDAiCQkJCVwKIAkiIgogI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJInJ1biBuZXRfbmZzIgogCi0KIC8qCiAgKiBkbyBib2FyZC1zcGVjaWZpYyBpbml0CiAgKi8KQEAgLTE0OCw2ICsxNjIsMTIgQEAKIAogCiAvKgorICogU2V0IElQQiBzcGVlZCB0byAxMDBNSHoKKyAqLworI2RlZmluZSBDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEsKKworCisvKgogICogTWVtb3J5IG1hcAogICovCiAvKgpAQCAtMjQzLDggKzI2Myw4NiBAQAogI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJMjU2CS8qIG1heCBudW0gb2Ygc2VjdHMgb24gb25lIGNoaXAgKi8KICNkZWZpbmUgQ09ORklHX0ZMQVNIXzE2QklUCQkvKiBGbGFzaCBpcyAxNi1iaXQgKi8KIAorLyoKKyAqIE1URCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPW1vdGlvbnByby0wIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1tb3Rpb25wcm8tMDoiCQkJICBcCisJCQkJCSIxM20oZnMpLDJtKGtlcm5lbCksMjU2ayh1Ym9vdCksIiBcCisJCQkJCSI2NGsoZW52KSw2NGsocmVkdW5kX2VudiksNjRrKGR0YiksIiBcCisJCQkJCSItKHVzZXJfZGF0YSkiCisKKy8qCisgKiBJREUvQVRBIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfQVRBX0JBU0VfQUREUglNUEM1WFhYX0FUQQorI2RlZmluZSBDRkdfSURFX01BWEJVUwkJMQorI2RlZmluZSBDRkdfSURFX01BWERFVklDRQkxCisjZGVmaW5lIENPTkZJR19JREVfUFJFSU5JVAorCisjZGVmaW5lIENGR19BVEFfREFUQV9PRkZTRVQJMHgwMDYwCisjZGVmaW5lIENGR19BVEFfUkVHX09GRlNFVAlDRkdfQVRBX0RBVEFfT0ZGU0VUCisjZGVmaW5lIENGR19BVEFfU1RSSURFCQk0CisjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCisKKworLyoKKyAqIEkyQyBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCQkxCS8qIEkyQyB3aXRoIGhhcmR3YXJlIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19NT0RVTEUJCTIJLyogc2VsZWN0IEkyQyBtb2R1bGUgIzIgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRAkJMTAwMDAwCS8qIDEwMCBrSHogKi8KKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRQkJMHg3RgorCisKKy8qCisgKiBFRVBST00gY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFJfTEVOCQkxCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUJMQkvKiBEVFQgZHJpdmVyIG5lZWRzIHRoaXMgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMJMQkvKiAyIGJ5dGVzIHBlciB3cml0ZSBjeWNsZSAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMJNQkvKiAybXMvY3ljbGUgKyAzbXMgZXh0cmEgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19NVUxUSV9FRVBST01TCQkxCS8qIDIgRUVQUk9NcyAoYWRkcjo1MCw1MikgKi8KKwogCiAvKgorICogUlRDIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfUlRDX0RTMTMzNwkxCisjZGVmaW5lIENGR19JMkNfUlRDX0FERFIJMHg2OAorCisKKy8qCisgKiBTdGF0dXMgTEVEIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfU1RBVFVTX0xFRAkJLyogU3RhdHVzIExFRCBlbmFibGVkICovCisjZGVmaW5lIENPTkZJR19CT0FSRF9TUEVDSUZJQ19MRUQKKworI2RlZmluZSBFTkFCTEVfR1BJT19PVVQJCTB4MDAwMDAwMjQKKyNkZWZpbmUgTEVEX09OCQkJMHgwMDAwMDAxMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqIEluIGNhc2Ugb2YgTW90aW9uLVBSTywgYSBMRUQgaXMgaWRlbnRpZmllZCBieSBpdHMgY29ycmVzcG9uZGluZworICogR1BUIEVuYWJsZSBhbmQgTW9kZSBTZWxlY3QgUmVnaXN0ZXIuCisgKi8KK3R5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGxlZF9pZF90OworCitleHRlcm4gdm9pZCBfX2xlZF9pbml0KGxlZF9pZF90IGlkLCBpbnQgc3RhdGUpOworZXh0ZXJuIHZvaWQgX19sZWRfdG9nZ2xlKGxlZF9pZF90IGlkKTsKK2V4dGVybiB2b2lkIF9fbGVkX3NldChsZWRfaWRfdCBpZCwgaW50IHN0YXRlKTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworCisvKgorICogVGVtcGVyYXR1cmUgc2Vuc29yCisgKi8KKyNkZWZpbmUgQ09ORklHX0RUVF9MTTc1CQkxCisjZGVmaW5lIENPTkZJR19EVFRfU0VOU09SUwl7IDB4NDkgfQorCisKKy8qCiAgKiBFbnZpcm9ubWVudCBzZXR0aW5ncwogICovCiAjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQpAQCAtMjUzLDYgKzM1MSw5IEBACiAjZGVmaW5lIENGR19FTlZfU0laRQkJMHgxMDAwCiAjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4MTAwMDAKIAorLyogQ29uZmlndXJhdGlvbiBvZiByZWR1bmRhbnQgZW52aXJvbm1lbnQgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZGVmaW5lIENGR19FTlZfU0laRV9SRURVTkQJKENGR19FTlZfU0laRSkKIAogLyoKICAqIFBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbgpAQCAtMjcwLDExICszNzEsMTcgQEAKIAogCiAvKgorICogTW90aW9uLVBSTydzIENQTEQgcmV2aXNpb24gY29udHJvbCByZWdpc3RlcgorICovCisjZGVmaW5lIENQTERfUkVWX1JFR0lTVEVSCShDRkdfQ1MyX1NUQVJUICsgMHgwNikKKworCisvKgogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogICovCiAjZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5ICAgICovCiAjZGVmaW5lIENGR19QUk9NUFQJCSI9PiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgICAqLwotI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgICovCisjZGVmaW5lIENGR19DQlNJWkUJCTEwMjQJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KICNkZWZpbmUgQ0ZHX1BCU0laRSAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCiAjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KICNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQlDRkdfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUgKi8KQEAgLTMwMiw0ICs0MDksMTUgQEAKIC8qIE5vdCBuZWVkZWQgZm9yIE1QQyA1eHh4IFUtQm9vdCwgYnV0IHVzZWQgYnkgdG9vbHMvdXBkYXRlciAqLwogI2RlZmluZSBDRkdfUkVTRVRfQUREUkVTUwkweGZmZjAwMTAwCiAKKy8qIHBhc3Mgb3BlbiBmaXJtd2FyZSBmbGF0IHRyZWUgKi8KKyNkZWZpbmUgQ09ORklHX09GX0ZMQVRfVFJFRQkxCisjZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAkxCisKKy8qIG1heGltdW0gc2l6ZSBvZiB0aGUgZmxhdCB0cmVlICg4SykgKi8KKyNkZWZpbmUgT0ZfRkxBVF9UUkVFX01BWF9TSVpFCTgxOTIKKyNkZWZpbmUgT0ZfQ1BVCQkJIlBvd2VyUEMsNTIwMEAwIgorI2RlZmluZSBPRl9TT0MJCQkic29jNTIwMEBmMDAwMDAwMCIKKyNkZWZpbmUgT0ZfVEJDTEsJCShiZC0+YmlfYnVzZnJlcSAvIDQpCisjZGVmaW5lIE9GX1NURE9VVF9QQVRICQkiL3NvYzUyMDBAZjAwMDAwMDAvc2VyaWFsQDIwMDAiCisKICNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbzJkbnQuaCBiL2luY2x1ZGUvY29uZmlncy9vMmRudC5oCmluZGV4IDVjMDVhNzQuLjYzZDBkYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9vMmRudC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9vMmRudC5oCkBAIC0xMzcsMTcgKzEzNywxNyBAQAogLyoKICAqIElQQiBCdXMgY2xvY2tpbmcgY29uZmlndXJhdGlvbi4KICAqLwotI2RlZmluZSBDRkdfSVBCU1BFRURfMTMzCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLworI2RlZmluZSBDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEsJCS8qIGRlZmluZSBmb3IgMTMzTUh6IHNwZWVkICovCiAKLSNpZiBkZWZpbmVkKENGR19JUEJTUEVFRF8xMzMpCisjaWYgZGVmaW5lZChDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEspCiAvKgogICogUENJIEJ1cyBjbG9ja2luZyBjb25maWd1cmF0aW9uCiAgKgogICogQWN0dWFsbHkgYSBQQ0kgQ2xvY2sgb2YgNjYgTUh6IGlzIG9ubHkgc2V0IChpbiBjcHVfaW5pdC5jKSBpZgotICogQ0ZHX0lQQlNQRUVEXzEzMyBpcyBkZWZpbmVkLiBUaGlzIGlzIGJlY2F1c2UgYSBQQ0kgQ2xvY2sgb2YgNjYgTUh6IHlldCBoYXNuJ3QKLSAqIGJlZW4gdGVzdGVkIHdpdGggYSBJUEIgQnVzIENsb2NrIG9mIDY2IE1Iei4KKyAqIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSyBpcyBkZWZpbmVkLiBUaGlzIGlzIGJlY2F1c2UgYSBQQ0kgQ2xvY2sKKyAqICBvZiA2NiBNSHogeWV0IGhhc24ndCBiZWVuIHRlc3RlZCB3aXRoIGEgSVBCIEJ1cyBDbG9jayBvZiA2NiBNSHouCiAgKi8KLSNkZWZpbmUgQ0ZHX1BDSVNQRUVEXzY2CQkJLyogZGVmaW5lIGZvciA2Nk1IeiBzcGVlZCAqLworI2RlZmluZSBDRkdfUENJQ0xLX0VRVUFMU19JUEJDTEtfRElWMgkvKiBkZWZpbmUgZm9yIDY2TUh6IHNwZWVkICovCiAjZW5kaWYKICNlbmRpZgogCkBAIC0yNzYsNyArMjc2LDcgQEAKICNkZWZpbmUgQ0ZHX0JPT1RDU19TVEFSVAlDRkdfRkxBU0hfQkFTRQogI2RlZmluZSBDRkdfQk9PVENTX1NJWkUJCUNGR19GTEFTSF9TSVpFCiAKLSNpZmRlZiBDRkdfUENJU1BFRURfNjYKKyNpZmRlZiBDRkdfUENJQ0xLX0VRVUFMU19JUEJDTEtfRElWMgogLyoKICAqIEZvciA2NiBNSHogUENJIGNsb2NrIGFkZGl0aW9uYWwgV2FpdCBTdGF0ZSBpcyBuZWVkZWQgZm9yIENTMCAoZmxhc2gpLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvcGY1MjAwLmggYi9pbmNsdWRlL2NvbmZpZ3MvcGY1MjAwLmgKaW5kZXggZmVmZGIzYy4uNzE1MWE5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3BmNTIwMC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9wZjUyMDAuaApAQCAtMTcxLDcgKzE3MSw3IEBACiAvKgogICogSVBCIEJ1cyBjbG9ja2luZyBjb25maWd1cmF0aW9uLgogICovCi0jdW5kZWYgQ0ZHX0lQQlNQRUVEXzEzMwkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KKyN1bmRlZiBDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEsJCS8qIGRlZmluZSBmb3IgMTMzTUh6IHNwZWVkICovCiAjZW5kaWYKIC8qCiAgKiBJMkMgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NjMy5oIGIvaW5jbHVkZS9jb25maWdzL3NjMy5oCmluZGV4IDZiNmFjZmEuLmU0MzU3YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zYzMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvc2MzLmgKQEAgLTU4LDcgKzU4LDcgQEAKICAqIDB4RkZFMDAwMDAgLi4uLiAweEZGRkZGRkZGIC0+IEJPT1QtUk9NICgyIE1pQikKICAqLwogCi0jZGVmaW5lIENPTkZJR19TT0xJRENBUkQzCTEKKyNkZWZpbmUgQ09ORklHX1NDMwkxCiAjZGVmaW5lIENPTkZJR180eHgJMQogI2RlZmluZSBDT05GSUdfNDA1R1AJMQogCkBAIC0xMzQsNyArMTM0LDggQEAKICNpZiAxCS8qIGZlZWwgZnJlZSB0byBkaXNhYmxlIGZvciBkZXZlbG9wbWVudCAqLwogI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfS0VZRUQJCS8qIEVuYWJsZSBwYXNzd29yZCBwcm90ZWN0aW9uCSovCiAjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9QUk9NUFQJCSJcblNDMyAtIGJvb3RpbmcuLi4gc3RvcCB3aXRoIEVOVEVSXG4iCi0jZGVmaW5lIENPTkZJR19BVVRPQk9PVF9ERUxBWV9TVFIJIlxuIgkvKiAxc3QgInBhc3N3b3JkIgkqLworI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfREVMQVlfU1RSCSJcciIJLyogMXN0ICJwYXNzd29yZCIJKi8KKyNkZWZpbmUgQ09ORklHX0FVVE9CT09UX0RFTEFZX1NUUjIJIlxuIgkvKiAxc3QgInBhc3N3b3JkIgkqLwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvc2VxdW9pYS5oIGIvaW5jbHVkZS9jb25maWdzL3NlcXVvaWEuaAppbmRleCAxZjE5NjIxLi4yMzI0M2E0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvc2VxdW9pYS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9zZXF1b2lhLmgKQEAgLTM4LDcgKzM4LDkgQEAKICNkZWZpbmUgQ09ORklHXzQ0MEdSWAkJMQkJLyogU3BlY2lmaWMgUFBDNDQwR1J4CSovCiAjZW5kaWYKICNkZWZpbmUgQ09ORklHXzR4eAkJMQkJLyogLi4uIFBQQzR4eCBmYW1pbHkJKi8KLSNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQkzMzAwMDAwMAkvKiBleHRlcm5hbCBmcmVxIHRvIHBsbAkqLworLyogRGV0ZWN0IFNlcXVvaWEgUExMIGlucHV0IGNsb2NrIGF1dG9tYXRpY2FsbHkgdmlhIENQTEQgYml0CQkqLworI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRICAgICgoaW44KENGR19CQ1NSX0JBU0UgKyAzKSAmIDB4ODApID8gXAorCQkJCTMzMzMzMzMzIDogMzMwMDAwMDApCiAKICNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRiAxCQkvKiBDYWxsIGJvYXJkX2Vhcmx5X2luaXRfZiAqLwogI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IJMQkJLyogQ2FsbCBtaXNjX2luaXRfcgkqLwpAQCAtMTY2LDEyICsxNjgsMTkgQEAKIC8qCiAgKiBOb3cgdGhlIE5BTkQgY2hpcCBoYXMgdG8gYmUgZGVmaW5lZCAobm8gYXV0b2RldGVjdGlvbiB1c2VkISkKICAqLwotI2RlZmluZSBDRkdfTkFORF9QQUdFX1NJWkUJKDUxMikJCS8qIE5BTkQgY2hpcCBwYWdlIHNpemUJCSovCisjZGVmaW5lIENGR19OQU5EX1BBR0VfU0laRQk1MTIJCS8qIE5BTkQgY2hpcCBwYWdlIHNpemUJCSovCiAjZGVmaW5lIENGR19OQU5EX0JMT0NLX1NJWkUJKDE2IDw8IDEwKQkvKiBOQU5EIGNoaXAgYmxvY2sgc2l6ZQkJKi8KLSNkZWZpbmUgQ0ZHX05BTkRfUEFHRV9DT1VOVAkoMzIpCQkvKiBOQU5EIGNoaXAgcGFnZSBjb3VudAkJKi8KLSNkZWZpbmUgQ0ZHX05BTkRfQkFEX0JMT0NLX1BPUwkoNSkJCS8qIExvY2F0aW9uIG9mIGJhZCBibG9jayBtYXJrZXIJKi8KKyNkZWZpbmUgQ0ZHX05BTkRfUEFHRV9DT1VOVAkzMgkJLyogTkFORCBjaGlwIHBhZ2UgY291bnQJCSovCisjZGVmaW5lIENGR19OQU5EX0JBRF9CTE9DS19QT1MJNQkJLyogTG9jYXRpb24gb2YgYmFkIGJsb2NrIG1hcmtlcgkqLwogI3VuZGVmIENGR19OQU5EXzRfQUREUl9DWUNMRQkJCS8qIE5vIGZvdXJ0aCBhZGRyIHVzZWQgKDw9MzJNQikJKi8KIAorI2RlZmluZSBDRkdfTkFORF9FQ0NTSVpFCTI1NgorI2RlZmluZSBDRkdfTkFORF9FQ0NCWVRFUwkzCisjZGVmaW5lIENGR19OQU5EX0VDQ1NURVBTCShDRkdfTkFORF9QQUdFX1NJWkUgLyBDRkdfTkFORF9FQ0NTSVpFKQorI2RlZmluZSBDRkdfTkFORF9PT0JTSVpFCTE2CisjZGVmaW5lIENGR19OQU5EX0VDQ1RPVEFMCShDRkdfTkFORF9FQ0NCWVRFUyAqIENGR19OQU5EX0VDQ1NURVBTKQorI2RlZmluZSBDRkdfTkFORF9FQ0NQT1MJCXswLCAxLCAyLCAzLCA2LCA3fQorCiAjaWZkZWYgQ0ZHX0VOVl9JU19JTl9OQU5ECiAvKgogICogRm9yIE5BTkQgYm9vdGluZyB0aGUgZW52aXJvbm1lbnQgaXMgZW1iZWRkZWQgaW4gdGhlIFUtQm9vdCBpbWFnZS4gUGxlYXNlIHRha2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zbW1hY280LmggYi9pbmNsdWRlL2NvbmZpZ3Mvc21tYWNvNC5oCmluZGV4IGUxMDZiM2IuLjE4NWMyZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zbW1hY280LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NtbWFjbzQuaApAQCAtMTM4LDE3ICsxMzgsMTcgQEAKIC8qCiAgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCiAgKi8KLSNkZWZpbmUgQ0ZHX0lQQlNQRUVEXzEzMwkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KKyNkZWZpbmUgQ0ZHX0lQQkNMS19FUVVBTFNfWExCQ0xLCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLwogCi0jaWYgZGVmaW5lZChDRkdfSVBCU1BFRURfMTMzKQorI2lmIGRlZmluZWQoQ0ZHX0lQQkNMS19FUVVBTFNfWExCQ0xLKQogLyoKICAqIFBDSSBCdXMgY2xvY2tpbmcgY29uZmlndXJhdGlvbgogICoKICAqIEFjdHVhbGx5IGEgUENJIENsb2NrIG9mIDY2IE1IeiBpcyBvbmx5IHNldCAoaW4gY3B1X2luaXQuYykgaWYKLSAqIENGR19JUEJTUEVFRF8xMzMgaXMgZGVmaW5lZC4gVGhpcyBpcyBiZWNhdXNlIGEgUENJIENsb2NrIG9mIDY2IE1IeiB5ZXQgaGFzbid0Ci0gKiBiZWVuIHRlc3RlZCB3aXRoIGEgSVBCIEJ1cyBDbG9jayBvZiA2NiBNSHouCisgKiBDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEsgaXMgZGVmaW5lZC4gVGhpcyBpcyBiZWNhdXNlIGEgUENJIENsb2NrCisgKiBvZiA2NiBNSHogeWV0IGhhc24ndCBiZWVuIHRlc3RlZCB3aXRoIGEgSVBCIEJ1cyBDbG9jayBvZiA2NiBNSHouCiAgKi8KLSNkZWZpbmUgQ0ZHX1BDSVNQRUVEXzY2CQkJLyogZGVmaW5lIGZvciA2Nk1IeiBzcGVlZCAqLworI2RlZmluZSBDRkdfUENJQ0xLX0VRVUFMU19JUEJDTEtfRElWMgkvKiBkZWZpbmUgZm9yIDY2TUh6IHNwZWVkICovCiAjZW5kaWYKIAogLyoKQEAgLTM1Nyw3ICszNTcsNyBAQAogCiAjZGVmaW5lIENGR19CT09UQ1NfU1RBUlQJQ0ZHX0ZMQVNIX0JBU0UKICNkZWZpbmUgQ0ZHX0JPT1RDU19TSVpFCQlDRkdfRkxBU0hfU0laRQotI2lmZGVmIENGR19QQ0lTUEVFRF82NgorI2lmZGVmIENGR19QQ0lDTEtfRVFVQUxTX0lQQkNMS19ESVYyCiAjZGVmaW5lIENGR19CT09UQ1NfQ0ZHCQkweDAwMDhERjMwIC8qIGZvciBwY2lfY2xrICA9IDY2IE1IeiAqLwogI2Vsc2UKICNkZWZpbmUgQ0ZHX0JPT1RDU19DRkcJCTB4MDAwNERGMzAgLyogZm9yIHBjaV9jbGsgPSAzMyBNSHogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zcGlldmFsLmggYi9pbmNsdWRlL2NvbmZpZ3Mvc3BpZXZhbC5oCmluZGV4IGY0MGRkZTIuLjk4ODhkMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zcGlldmFsLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NwaWV2YWwuaApAQCAtMjE5LDE3ICsyMTksMTcgQEAKIC8qCiAgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCiAgKi8KLSNkZWZpbmUgQ0ZHX0lQQlNQRUVEXzEzMwkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KKyNkZWZpbmUgQ0ZHX0lQQkNMS19FUVVBTFNfWExCQ0xLCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLwogCi0jaWYgZGVmaW5lZChDRkdfSVBCU1BFRURfMTMzKQorI2lmIGRlZmluZWQoQ0ZHX0lQQkNMS19FUVVBTFNfWExCQ0xLKQogLyoKICAqIFBDSSBCdXMgY2xvY2tpbmcgY29uZmlndXJhdGlvbgogICoKICAqIEFjdHVhbGx5IGEgUENJIENsb2NrIG9mIDY2IE1IeiBpcyBvbmx5IHNldCAoaW4gY3B1X2luaXQuYykgaWYKLSAqIENGR19JUEJTUEVFRF8xMzMgaXMgZGVmaW5lZC4gVGhpcyBpcyBiZWNhdXNlIGEgUENJIENsb2NrIG9mIDY2IE1IeiB5ZXQgaGFzbid0Ci0gKiBiZWVuIHRlc3RlZCB3aXRoIGEgSVBCIEJ1cyBDbG9jayBvZiA2NiBNSHouCisgKiBDRkdfSVBCQ0xLX0VRVUFMU19YTEJDTEsgaXMgZGVmaW5lZC4gVGhpcyBpcyBiZWNhdXNlIGEgUENJIENsb2NrCisgKiBvZiA2NiBNSHogeWV0IGhhc24ndCBiZWVuIHRlc3RlZCB3aXRoIGEgSVBCIEJ1cyBDbG9jayBvZiA2NiBNSHouCiAgKi8KLSNkZWZpbmUgQ0ZHX1BDSVNQRUVEXzY2CQkJLyogZGVmaW5lIGZvciA2Nk1IeiBzcGVlZCAqLworI2RlZmluZSBDRkdfUENJQ0xLX0VRVUFMU19JUEJDTEtfRElWMgkvKiBkZWZpbmUgZm9yIDY2TUh6IHNwZWVkICovCiAjZW5kaWYKIAogLyoKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCiAjZGVmaW5lIENGR19CT09UQ1NfU1RBUlQJQ0ZHX0ZMQVNIX0JBU0UKICNkZWZpbmUgQ0ZHX0JPT1RDU19TSVpFCQlDRkdfRkxBU0hfU0laRQotI2lmZGVmIENGR19QQ0lTUEVFRF82NgorI2lmZGVmIENGR19QQ0lDTEtfRVFVQUxTX0lQQkNMS19ESVYyCiAjZGVmaW5lIENGR19CT09UQ1NfQ0ZHCQkweDAwMDhERjMwIC8qIGZvciBwY2lfY2xrICA9IDY2IE1IeiAqLwogI2Vsc2UKICNkZWZpbmUgQ0ZHX0JPT1RDU19DRkcJCTB4MDAwNERGMzAgLyogZm9yIHBjaV9jbGsgPSAzMyBNSHogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zdHhzc2EuaCBiL2luY2x1ZGUvY29uZmlncy9zdHhzc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc4YTMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL3N0eHNzYS5oCkBAIC0wLDAgKzEsNDcyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA1IEVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jLgorICogRGFuIE1hbGVrIDxkYW5AZW1iZWRkZWRhbGxleS5jb20+CisgKiBDb3BpZWQgZnJvbSBTVHggR1AzLgorICogVXBkYXRlcyBmb3IgU2lsaWNvbiBUeCBHUDMgU1NBIGJvYXJkLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMiwyMDAzIE1vdG9yb2xhLEluYy4KKyAqIFhpYW5naHVhIFhpYW8gPFguWGlhb0Btb3Rvcm9sYS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogbXBjODU2MGFkcyBib2FyZCBjb25maWd1cmF0aW9uIGZpbGUgKi8KKy8qIHBsZWFzZSByZWZlciB0byBkb2MvUkVBRE1FLm1wYzg1eHggZm9yIG1vcmUgaW5mbyAqLworLyogbWFrZSBzdXJlIHlvdSBjaGFuZ2UgdGhlIE1BQyBhZGRyZXNzIGFuZCBvdGhlciBuZXR3b3JrIHBhcmFtcyBmaXJzdCwKKyAqIHNlYXJjaCBmb3IgQ09ORklHX0VUSEFERFIsQ09ORklHX1NFUlZFUklQLGV0YyBpbiB0aGlzIGZpbGUKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyAqLworI2RlZmluZSBDT05GSUdfQk9PS0UJCTEJLyogQk9PS0UJCSovCisjZGVmaW5lIENPTkZJR19FNTAwCQkxCS8qIEJPT0tFIGU1MDAgZmFtaWx5CSovCisjZGVmaW5lIENPTkZJR19NUEM4NXh4CQkxCS8qIE1QQzg1NDAvTVBDODU2MAkqLworI2RlZmluZSBDT05GSUdfQ1BNMgkJMQkvKiBoYXMgQ1BNMiAqLworI2RlZmluZSBDT05GSUdfU1RYU1NBCQkxCS8qIFNpbGljb24gVHggR1BQUCBTU0EgYm9hcmQgc3BlY2lmaWMqLworCisjdW5kZWYgIENPTkZJR19QQ0kJICAgICAgICAgCS8qIHBjaSBldGhlcm5ldCBzdXBwb3J0CSovCisjZGVmaW5lIENPTkZJR19UU0VDX0VORVQgCQkvKiB0c2VjIGV0aGVybmV0IHN1cHBvcnQqLworI3VuZGVmIENPTkZJR19FVEhFUl9PTl9GQ0MgICAgICAgICAgICAgLyogY3BtIEZDQyBldGhlcm5ldCBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisjZGVmaW5lIENPTkZJR19TUERfRUVQUk9NICAgICAgICAgICAgICAgLyogVXNlIFNQRCBFRVBST00gZm9yIEREUiBzZXR1cCAqLworI3VuZGVmICBDT05GSUdfRERSX0VDQwkJCS8qIG9ubHkgZm9yIEVDQyBERFIgbW9kdWxlICovCisjdW5kZWYgQ09ORklHX0REUl9ETEwgICAgICAgICAgICAgICAgICAvKiBwb3NzaWJsZSBETEwgZml4IG5lZWRlZCAqLworI2RlZmluZSBDT05GSUdfRERSXzJUX1RJTUlORwkJLyogU2V0cyB0aGUgMlQgdGltaW5nIGJpdCAqLworCisKKy8qIHN5c2NsayBmb3IgTVBDODV4eAorICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUSAgICAgMzMwMDAwMDAgLyogbW9zdCBwY2kgY2FyZHMgYXJlIDMzTWh6ICovCisKKy8qIEJsaW5raW4nIExFRHMgZm9yIFJvYmVydCA6LSkKKyovCisjZGVmaW5lIENPTkZJR19TSE9XX0FDVElWSVRZIDEKKworLyoKKyAqIFRoZXNlIGNhbiBiZSB0b2dnbGVkIGZvciBwZXJmb3JtYW5jZSBhbmFseXNpcywgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0LgorICovCisjZGVmaW5lIENPTkZJR19MMl9DQUNIRSAgICAgICAgICAgICAgICAgICAgIC8qIHRvZ2dsZSBMMiBjYWNoZSAgICAgICAgICovCisjZGVmaW5lICBDT05GSUdfQlRCICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0b2dnbGUgYnJhbmNoIHByZWRpdGlvbiAqLworI2RlZmluZSAgQ09ORklHX0FERFJfU1RSRUFNSU5HICAgICAgICAgICAgICAgLyogdG9nZ2xlIGFkZHIgc3RyZWFtaW5nICAgKi8KKworI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GICAgMSAgICAgICAgLyogQ2FsbCBib2FyZF9wcmVfaW5pdCAgICAgICovCisKKyN1bmRlZiAgQ0ZHX0RSQU1fVEVTVCAgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IHRlc3QsIHRha2VzIHRpbWUgICovCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUICAgICAgIDB4MDAyMDAwMDAgIC8qIG1lbXRlc3QgcmVnaW9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORCAgICAgICAgIDB4MDA0MDAwMDAKKworCisvKiBMb2NhbGJ1cyBjb25uZWN0b3IuICBUaGVyZSBhcmUgbWFueSBvcHRpb25zIHRoYXQgY2FuIGJlCisgKiBjb25uZWN0ZWQgaGVyZSwgaW5jbHVkaW5nIHNkcmFtIG9yIGxvdHMgb2YgZmxhc2guCisgKiBUaGlzIGFkZHJlc3MsIGhvd2V2ZXIsIGlzIHVzZWQgdG8gY29uZmlndXJlIGEgMjU2TSBsb2NhbCBidXMKKyAqIHdpbmRvdyB0aGF0IGluY2x1ZGVzIHRoZSBDb25maWcgbGF0Y2ggYmVsb3cuCisgKi8KKyNkZWZpbmUgQ0ZHX0xCQ19PUFRJT05fQkFTRQkweEYwMDAwMDAwICAgICAgLyogTG9jYWxidXMgRXh0ZW5zaW9uICovCisjZGVmaW5lIENGR19MQkNfT1BUSU9OX1NJWkUJMjU2CQkvKiAyNTZNQiAqLworCisvKiBUaGVyZSBhcmUgdmFyaW91cyBmbGFzaCBvcHRpb25zIHVzZWQsIHdlIGNvbmZpZ3VyZSBmb3IgdGhlIGxhcmdlc3QsCisgKiB3aGljaCBpcyA2NE1ieXRlcy4gIFRoZSBDRkkgd29ya3MgZmluZSBhbmQgd2lsbCBkaXNjb3ZlciB0aGUgcHJvcGVyCisgKiBzaXplcy4KKyAqLworI2lmZGVmIENPTkZJR19TVFhTU0FfNE0KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4RkZDMDAwMDAgICAgICAvKiBzdGFydCBvZiAgNCBNaUIgZmxhc2ggKi8KKyNlbHNlCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkweEZDMDAwMDAwICAgICAgLyogc3RhcnQgb2YgNjQgTWlCIGZsYXNoICovCisjZW5kaWYKKyNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0JKENGR19GTEFTSF9CQVNFIHwgMHgxODAxKSAvKiBwb3J0IHNpemUgMzJiaXQJICovCisjZGVmaW5lIENGR19PUjBfUFJFTElNCShDRkdfRkxBU0hfQkFTRSB8IDB4MEZGNykKKworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkxCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCTEKKyN1bmRlZiBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSAJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTI1NgkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCSovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QgeyBDRkdfRkxBU0hfQkFTRSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworLyogVGhlIGNvbmZpZ3VyYXRpb24gbGF0Y2ggaXMgQ2hpcCBTZWxlY3QgMS4KKyAqIEl0J3MgYW4gOC1iaXQgbGF0Y2ggaW4gdGhlIGxvd2VyIDggYml0cyBvZiB0aGUgd29yZC4KKyAqLworI2RlZmluZSBDRkdfTEJDX0NGR0xBVENIX0JBU0UJMHhGQjAwMDAwMAkvKiBCYXNlIG9mIGNvbmZpZyBsYXRjaCAqLworI2RlZmluZSBDRkdfQlIxX1BSRUxJTQkJMHhGQjAwMTgwMQkvKiAzMi1iaXQgcG9ydCAqLworI2RlZmluZSBDRkdfT1IxX1BSRUxJTQkJMHhGRkZGMEZGNyAgICAgIC8qIDY0SyBpcyBlbm91Z2ggKi8KKworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgIAlURVhUX0JBU0UJLyogc3RhcnQgb2YgbW9uaXRvcgkqLworCisjaWYgKENGR19NT05JVE9SX0JBU0UgPCBDRkdfRkxBU0hfQkFTRSkKKyNkZWZpbmUgQ0ZHX1JBTUJPT1QKKyNlbHNlCisjdW5kZWYgIENGR19SQU1CT09UCisjZW5kaWYKKworI2lmZGVmIENGR19SQU1CT09UCisjZGVmaW5lIENGR19DQ1NSQkFSX0RFRkFVTFQgCTB4NDAwMDAwMDAJLyogQ0NTUkJBUiBieSBCREkgY2ZnCSovCisjZWxzZQorI2RlZmluZSBDRkdfQ0NTUkJBUl9ERUZBVUxUIAkweGZmNzAwMDAwCS8qIENDU1JCQVIgRGVmYXVsdAkqLworI2VuZGlmCisjZGVmaW5lIENGR19DQ1NSQkFSICAgICAgICAgICAgIDB4ZTAwMDAwMDAgICAgICAvKiByZWxvY2F0ZWQgQ0NTUkJBUiAgICAqLworI2RlZmluZSBDRkdfSU1NUgkJQ0ZHX0NDU1JCQVIJLyogUFFJSSB1c2VzIENGR19JTU1SCSovCisKKworLyoKKyAqIEREUiBTZXR1cAorICovCisKKy8qCisgKiBCYXNlIGFkZHJlc3NlcyAtLSBOb3RlIHRoZXNlIGFyZSBlZmZlY3RpdmUgYWRkcmVzc2VzIHdoZXJlIHRoZQorICogYWN0dWFsIHJlc291cmNlcyBnZXQgbWFwcGVkIChub3QgcGh5c2ljYWwgYWRkcmVzc2VzKQorICovCisjZGVmaW5lIENGR19ERFJfU0RSQU1fQkFTRQkweDAwMDAwMDAwCS8qIEREUiBpcyBzeXN0ZW0gbWVtb3J5ICAqLworI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkJQ0ZHX0REUl9TRFJBTV9CQVNFCisKKyNkZWZpbmUgU1BEX0VFUFJPTV9BRERSRVNTIAkweDU0ICAgICAJLyogIEREUiBESU1NICovCisKKyN1bmRlZiBDT05GSUdfQ0xPQ0tTX0lOX01IWgorCisvKiBsb2NhbCBidXMgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0ZHX0JSMl9QUkVMSU0JCTB4ZjgwMDE4NjEJLyogNjRNQiBsb2NhbGJ1cyBTRFJBTSAgKi8KKyNkZWZpbmUgQ0ZHX09SMl9QUkVMSU0JCTB4ZmMwMDY5MDEKKyNkZWZpbmUgQ0ZHX0xCQ19MQ1JSCQkweDAwMDMwMDA0CS8qIGxvY2FsIGJ1cyBmcmVxIAkqLworI2RlZmluZSBDRkdfTEJDX0xCQ1IJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0xCQ19MU1JUCQkweDIwMDAwMDAwCisjZGVmaW5lIENGR19MQkNfTVJUUFIJCTB4MjAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl8xCQkweDI4NjFiNzIzCisjZGVmaW5lIENGR19MQkNfTFNETVJfMgkJMHgwODYxYjcyMworI2RlZmluZSBDRkdfTEJDX0xTRE1SXzMJCTB4MDg2MWI3MjMKKyNkZWZpbmUgQ0ZHX0xCQ19MU0RNUl80CQkweDE4NjFiNzIzCisjZGVmaW5lIENGR19MQkNfTFNETVJfNQkJMHg0MDYxYjcyMworCisjZGVmaW5lIENPTkZJR19MMV9JTklUX1JBTQorI2RlZmluZSBDRkdfSU5JVF9SQU1fTE9DSyAJMQorI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUiAgICAgICAweDYwMDAwMDAwICAgICAgLyogSW5pdGlhbCBSQU0gYWRkcmVzcyAgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORCAgICAJMHg0MDAwCSAgICAJLyogRW5kIG9mIHVzZWQgYXJlYSBpbiBSQU0gKi8KKworI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRSAgCTEyOAkJLyogbnVtIGJ5dGVzIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUCisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCSAgICAJKDI1NiAqIDEwMjQpICAgIC8qIFJlc2VydmUgMjU2IGtCIGZvciBNb24gKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JICAgIAkoNTEyICogMTAyNCkgICAgLyogUmVzZXJ2ZWQgZm9yIG1hbGxvYyAqLworCisvKiBTZXJpYWwgUG9ydCAqLworI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWCAgICAgMgorI3VuZGVmCUNPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTworI2RlZmluZSBDRkdfTlMxNjU1MAorI2RlZmluZSBDRkdfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUgICAgMQorI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsJCWdldF9idXNfZnJlcSgwKQorCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgXAorCXszMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCAxMTUyMDB9CisKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMSAgICAgICAgKENGR19DQ1NSQkFSKzB4NDUwMCkKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMiAgICAgICAgKENGR19DQ1NSQkFSKzB4NDYwMCkKKworI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCTEJLyogYWRkIGNvbW1hbmQgbGluZSBoaXN0b3J5CSovCisjZGVmaW5lIENGR19IVVNIX1BBUlNFUgkJMQkvKiBVc2UgdGhlIEhVU0ggcGFyc2VyCQkqLworI2lmZGVmICBDRkdfSFVTSF9QQVJTRVIKKyNkZWZpbmUgQ0ZHX1BST01QVF9IVVNIX1BTMiAiPiAiCisjZW5kaWYKKworLyogSTJDICovCisjZGVmaW5lIENPTkZJR19GU0xfSTJDCQkJLyogVXNlIEZTTCBjb21tb24gSTJDIGRyaXZlciAqLworI2RlZmluZSAgQ09ORklHX0hBUkRfSTJDICAgIAkJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydCovCisjdW5kZWYJQ09ORklHX1NPRlRfSTJDCQkJLyogSTJDIGJpdC1iYW5nZWQgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRAkJNDAwMDAwCS8qIEkyQyBzcGVlZCBhbmQgc2xhdmUgYWRkcmVzcwkqLworI2RlZmluZSBDRkdfSTJDX1NMQVZFCQkweDdGCisjaWYgMAorI2RlZmluZSBDRkdfSTJDX05PUFJPQkVTICAgICAgICB7MHgwMH0gIC8qIERvbid0IHByb2JlIHRoZXNlIGFkZHJzICovCisjZWxzZQorLyogSSBkaWQgdGhlICdpZiAwJyBzbyB3ZSBjb3VsZCBrZWVwIHRoZSBzeW50YXggYWJvdmUgaWYgZXZlciBuZWVkZWQuICovCisjdW5kZWYgQ0ZHX0kyQ19OT1BST0JFUworI2VuZGlmCisjZGVmaW5lIENGR19JMkNfT0ZGU0VUCQkweDMwMDAKKworLyogSTJDIEVFUFJPTS4gIEFUMjRDMzIsIHdlIGtlZXAgb3VyIGVudmlyb25tZW50IGluIGhlcmUuCisqLworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSCQkweDUxCS8qIDEwMTAwMDF4CQkqLworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTgkJMgorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUwk1CS8qID0zMiBCeXRlcyBwZXIgd3JpdGUJKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRQorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMJMjAKKworLyoKKyAqIFN0YW5kYXJkIDg1NTUgUENJIG1hcHBpbmcuCisgKiBBZGRyZXNzZXMgYXJlIG1hcHBlZCAxLTEuCisgKi8KKyNkZWZpbmUgQ0ZHX1BDSTFfTUVNX0JBU0UJMHg4MDAwMDAwMAorI2RlZmluZSBDRkdfUENJMV9NRU1fUEhZUwlDRkdfUENJMV9NRU1fQkFTRQorI2RlZmluZSBDRkdfUENJMV9NRU1fU0laRQkweDIwMDAwMDAwCS8qIDUxMk0gKi8KKyNkZWZpbmUgQ0ZHX1BDSTFfSU9fQkFTRQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19QQ0kxX0lPX1BIWVMJMHhlMjAwMDAwMAorI2RlZmluZSBDRkdfUENJMV9JT19TSVpFCTB4MDEwMDAwMDAJLyogMTZNICovCisKKyNkZWZpbmUgQ0ZHX1BDSTJfTUVNX0JBU0UJMHhhMDAwMDAwMAorI2RlZmluZSBDRkdfUENJMl9NRU1fUEhZUwlDRkdfUENJMl9NRU1fQkFTRQorI2RlZmluZSBDRkdfUENJMl9NRU1fU0laRQkweDIwMDAwMDAwCS8qIDUxMk0gKi8KKyNkZWZpbmUgQ0ZHX1BDSTJfSU9fQkFTRQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19QQ0kyX0lPX1BIWVMJMHhlMzAwMDAwMAorI2RlZmluZSBDRkdfUENJMl9JT19TSVpFCTB4MDEwMDAwMDAJLyogMTZNICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpIAkJLyogUENJIEV0aGVybmV0IGNhcmQgKi8KKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lIENPTkZJR19QQ0lfUE5QCSAgICAgICAgICAgICAgIAkvKiBkbyBwY2kgcGx1Zy1hbmQtcGxheSAqLworCisjdW5kZWYgQ09ORklHX0VFUFJPMTAwCisjdW5kZWYgQ09ORklHX1RVTElQCisKKyNpZiAhZGVmaW5lZChDT05GSUdfUENJX1BOUCkKKyAgI2RlZmluZSBQQ0lfRU5FVDBfSU9BRERSICAgIAkweGUwMDAwMDAwCisgICNkZWZpbmUgUENJX0VORVQwX01FTUFERFIgICAgIDB4ZTAwMDAwMDAKKyAgI2RlZmluZSBQQ0lfSURTRUxfTlVNQkVSICAgICAgMHgwYyAJLyogc2xvdDAtPjMoSURTRUwpPTEyLT4xNSAqLworI2VuZGlmCisKKyN1bmRlZiBDT05GSUdfUENJX1NDQU5fU0hPVworI2RlZmluZSBDRkdfUENJX1NVQlNZU19WRU5ET1JJRCAweDEwNTcgIC8qIE1vdG9yb2xhICovCisKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19UU0VDX0VORVQpCisKKyNpZm5kZWYgQ09ORklHX05FVF9NVUxUSQorI2RlZmluZSBDT05GSUdfTkVUX01VTFRJIAkxCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfTUlJCQkxCS8qIE1JSSBQSFkgbWFuYWdlbWVudAkJKi8KKworI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMQkxCisjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMxX05BTUUJIlRTRUMwIgorI2RlZmluZSBDT05GSUdfTVBDODVYWF9UU0VDMgkxCisjZGVmaW5lIENPTkZJR19NUEM4NVhYX1RTRUMyX05BTUUJIlRTRUMxIgorI3VuZGVmIENPTkZJR19NUFM4NVhYX0ZFQworCisjZGVmaW5lIFRTRUMxX1BIWV9BRERSCQkyCisjZGVmaW5lIFRTRUMyX1BIWV9BRERSCQk0CisjZGVmaW5lIFRTRUMxX1BIWUlEWAkJMAorI2RlZmluZSBUU0VDMl9QSFlJRFgJCTAKKyNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiVFNFQzAiCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0VUSEVSX09OX0ZDQykJLyogQ1BNIEZDQyBFdGhlcm5ldCAqLworCisjZGVmaW5lIENPTkZJR19FVEhFUl9PTl9GQ0MyICAgICAgICAgICAgIC8qIGRlZmluZSBpZiBldGhlciBvbiBGQ0MgICAqLworI3VuZGVmICBDT05GSUdfRVRIRVJfTk9ORSAgICAgICAgICAgICAgIC8qIGRlZmluZSBpZiBldGhlciBvbiBzb21ldGhpbmcgZWxzZSAqLworI2RlZmluZSBDT05GSUdfRVRIRVJfSU5ERVggICAgICAyICAgICAgIC8qIHdoaWNoIGNoYW5uZWwgZm9yIGV0aGVyICAqLworCisjaWYgKENPTkZJR19FVEhFUl9JTkRFWCA9PSAyKQorICAvKgorICAgKiAtIFJ4LUNMSyBpcyBDTEsxMworICAgKiAtIFR4LUNMSyBpcyBDTEsxNAorICAgKiAtIFNlbGVjdCBidXMgZm9yIGJkL2J1ZmZlcnMKKyAgICogLSBGdWxsIGR1cGxleAorICAgKi8KKyAgI2RlZmluZSBDRkdfQ01YRkNSX01BU0sgICAgICAgKENNWEZDUl9GQzIgfCBDTVhGQ1JfUkYyQ1NfTVNLIHwgQ01YRkNSX1RGMkNTX01TSykKKyAgI2RlZmluZSBDRkdfQ01YRkNSX1ZBTFVFICAgICAgKENNWEZDUl9SRjJDU19DTEsxMyB8IENNWEZDUl9URjJDU19DTEsxNCkKKyAgI2RlZmluZSBDRkdfQ1BNRkNSX1JBTVRZUEUgICAgMAorI2lmIDAKKyAgI2RlZmluZSBDRkdfRkNDX1BTTVIgICAgICAgICAgKEZDQ19QU01SX0ZERSkKKyNlbHNlCisgICNkZWZpbmUgQ0ZHX0ZDQ19QU01SICAgICAgICAgIDAKKyNlbmRpZgorICAjZGVmaW5lIEZFVEgyX1JTVAkJMHgwMQorI2VsaWYgKENPTkZJR19FVEhFUl9JTkRFWCA9PSAzKQorICAvKiBuZWVkIG1vcmUgZGVmaW5pdGlvbnMgaGVyZSBmb3IgRkUzICovCisgICNkZWZpbmUgRkVUSDNfUlNUCQkweDgwCisjZW5kaWYgIAkJCQkvKiBDT05GSUdfRVRIRVJfSU5ERVggKi8KKworLyogTURJTyBpcyBkb25lIHRocm91Z2ggdGhlIFRTRUMwIGNvbnRyb2wuCisqLworI2RlZmluZSBDT05GSUdfTUlJCQkJLyogTUlJIFBIWSBtYW5hZ2VtZW50ICovCisjdW5kZWYgQ09ORklHX0JJVEJBTkdNSUkJCS8qIGJpdC1iYW5nIE1JSSBQSFkgbWFuYWdlbWVudAkqLworCisjZW5kaWYKKworLyogRW52aXJvbm1lbnQgLSBkZWZhdWx0IGNvbmZpZyBpcyBpbiBmbGFzaCwgc2VlIGJlbG93ICovCisjaWYgMAkvKiBpbiBFRVBST00gKi8KKyMgZGVmaW5lIENGR19FTlZfSVNfSU5fRUVQUk9NCTEKKyMgZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkwCisjIGRlZmluZSBDRkdfRU5WX1NJWkUJCTIwNDgKKyNlbHNlCS8qIGluIGZsYXNoICovCisjIGRlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyMgaWZkZWYgQ09ORklHX1NUWFNTQV80TQorIyAgZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4MjAwMDAKKyMgZWxzZQkvKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gLSA2NCBNaUIgZmxhc2ggKi8KKyMgIGRlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkweDQwMDAwCisjIGVuZGlmCisjIGRlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfTU9OSVRPUl9CQVNFIC0gQ0ZHX0VOVl9TRUNUX1NJWkUpCisjIGRlZmluZSBDRkdfRU5WX1NJWkUJCTB4NDAwMAorIyBkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSIC0gQ0ZHX0VOVl9TRUNUX1NJWkUpCisjIGRlZmluZSBDRkdfRU5WX1NJWkVfUkVEVU5ECShDRkdfRU5WX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkxCS8qIGVjaG8gb24gZm9yIHNlcmlhbCBkb3dubG9hZAkqLworI2RlZmluZSBDRkdfTE9BRFNfQkFVRF9DSEFOR0UJMQkvKiBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2UJKi8KKworI2RlZmluZQlDT05GSUdfVElNRVNUQU1QCQkvKiBQcmludCBpbWFnZSBpbmZvIHdpdGggdHMJKi8KKworI2lmIGRlZmluZWQoQ0ZHX1JBTUJPT1QpCisgICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisgICNkZWZpbmUgIENPTkZJR19DT01NQU5EUwkoKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9QQ0kgfCBcCisJCQkJQ0ZHX0NNRF9QSU5HIHwgQ0ZHX0NNRF9JMkMpICYgXAorCQkJCSB+KENGR19DTURfRU5WIHwgXAorCQkJCSAgQ0ZHX0NNRF9MT0FEUyApKQorICAjZWxpZiBkZWZpbmVkKENPTkZJR19UU0VDX0VORVQpCisgICNkZWZpbmUgIENPTkZJR19DT01NQU5EUwkoKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9QSU5HIHwgXAorCQkJCUNGR19DTURfTUlJIHwgQ0ZHX0NNRF9JMkMgKSAmIFwKKwkJCQl+KENGR19DTURfRU5WKSkKKyAgI2VsaWYgZGVmaW5lZChDT05GSUdfRVRIRVJfT05fRkNDKQorICAjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKChDT05GSUdfQ01EX0RGTCB8IENGR19DTURfTUlJIHwgXAorCQkJCUNGR19DTURfUElORyB8IENGR19DTURfSTJDKSAmIFwKKwkJCQl+KENGR19DTURfRU5WKSkKKyAgI2VuZGlmCisjZWxzZQorICAjaWYgZGVmaW5lZChDT05GSUdfUENJKQorICAjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9QQ0kgfCBcCisJCQkJQ0ZHX0NNRF9FTEYgfCBDRkdfQ01EX1BJTkcgfCBDRkdfQ01EX0kyQykKKyAgI2VsaWYgZGVmaW5lZChDT05GSUdfVFNFQ19FTkVUKQorICAjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9QSU5HIHwgXAorCQkJCUNGR19DTURfRUxGIHwgQ0ZHX0NNRF9NSUkgfCBDRkdfQ01EX0kyQykKKyAgI2VsaWYgZGVmaW5lZChDT05GSUdfRVRIRVJfT05fRkNDKQorICAjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9NSUkgfCBcCisJCQkJQ0ZHX0NNRF9FTEYgfCBDRkdfQ01EX1BJTkcgfCBDRkdfQ01EX0kyQykKKyAgI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI3VuZGVmIENPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkCQkqLworCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCSJTU0E9PiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQJKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDRkdfQ0JTSVpFCTEwMjQJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCisjZWxzZQorI2RlZmluZSBDRkdfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNlbmRpZgorI2RlZmluZSBDRkdfUEJTSVpFIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCisjZGVmaW5lIENGR19CQVJHU0laRQlDRkdfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkweDEwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0haCQkxMDAwCQkvKiBkZWNyZW1lbnRlciBmcmVxOiAxIG1zIHRpY2tzICovCisKKy8qCisgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lIENGR19CT09UTUFQU1oJCSg4IDw8IDIwKSAvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCisKKy8qIENhY2hlIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQ0ZHX0RDQUNIRV9TSVpFCQkzMjc2OAorI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMzIKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTUJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUgKi8KKyNlbmRpZgorCisvKgorICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKKyAqCisgKiBCb290IEZsYWdzCisgKi8KKyNkZWZpbmUgQk9PVEZMQUdfQ09MRAkweDAxCQkvKiBOb3JtYWwgUG93ZXItT246IEJvb3QgZnJvbSBGTEFTSCAqLworI2RlZmluZSBCT09URkxBR19XQVJNCTB4MDIJCS8qIFNvZnR3YXJlIHJlYm9vdAkJKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENPTkZJR19LR0RCX0JBVURSQVRFCTIzMDQwMAkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLworI2RlZmluZSBDT05GSUdfS0dEQl9TRVJfSU5ERVgJMgkvKiB3aGljaCBzZXJpYWwgcG9ydCB0byB1c2UgKi8KKyNlbmRpZgorCisvKk5vdGU6IGNoYW5nZSBiZWxvdyBmb3IgeW91ciBuZXR3b3JrIHNldHRpbmchISEgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19UU0VDX0VORVQpIHx8IGRlZmluZWQoQ09ORklHX0VUSEVSX09OX0ZDQykKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJIDAwOmUwOjBjOjA3OjliOjhhCisjZGVmaW5lIENPTkZJR19IQVNfRVRIMQorI2RlZmluZSBDT05GSUdfRVRIMUFERFIgIDAwOmUwOjBjOjA3OjliOjhiCisjZGVmaW5lIENPTkZJR19IQVNfRVRIMgorI2RlZmluZSBDT05GSUdfRVRIMkFERFIgIDAwOmUwOjBjOjA3OjliOjhjCisjZW5kaWYKKworLyoKKyAqIEVudmlyb25tZW50IGluIEVFUFJPTSBpcyBjb21wYXRpYmxlIHdpdGggZGlmZmVyZW50IGZsYXNoIHNlY3RvciBzaXplcywKKyAqIGJ1dCBvbmx5IGxpdHRsZSBzcGFjZSBpcyBhdmFpbGFibGUsIHNvIHdlIHVzZSBhIHZlcnkgc2ltcGxlIHNldHVwLgorICogV2l0aCBlbnZpcm9ubWVudCBpbiBmbGFzaCwgd2UgdXNlIGEgbW9yZSBwb3dlcmZ1bCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgKi8KKyNpZmRlZiBDRkdfRU5WX0lTX0lOX0VFUFJPTQkJLyogdXNlIHJlc3RyaWN0ZWQgInN0YW5kYXJkIiBlbnZpcm9ubWVudCAqLworCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkgCTM4NDAwCisKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCS8qIC0xIGRpc2FibGUgYXV0b2Jvb3QgKi8KKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJib290bSAweGZmYzAwMDAwIDB4ZmZkMDAwMDAiCisjZGVmaW5lIENPTkZJR19CT09UQVJHUwkJInJvb3Q9L2Rldi9uZnMgcncgaXA9YW55IGNvbnNvbGU9dHR5UzEsJGJhdWRyYXRlIgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAgCTE5Mi4xNjguODUuMQorI2RlZmluZSBDT05GSUdfSVBBRERSICAJCTE5Mi4xNjguODUuNjAKKyNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUAkxOTIuMTY4Ljg1LjEKKyNkZWZpbmUgQ09ORklHX05FVE1BU0sJCTI1NS4yNTUuMjU1LjAKKyNkZWZpbmUgQ09ORklHX0hPU1ROQU1FIAlTVFhfU1NBCisjZGVmaW5lIENPTkZJR19ST09UUEFUSCAJL2dwcHByb290CisjZGVmaW5lIENPTkZJR19CT09URklMRSAJdUltYWdlCisjZGVmaW5lIENPTkZJR19MT0FEQUREUgkJMHgxMDAwMDAwCisKKyNlbHNlIC8qIEVOViBJUyBJTiBGTEFTSAkJLS0gdXNlIGEgZnVsbC1ibG93biBlbnZpb25tZW50ICovCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCSAJMTE1MjAwCisKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQk1CS8qIC0xIGRpc2FibGUgYXV0b2Jvb3QgKi8KKworI2RlZmluZSBDT05GSUdfUFJFQk9PVAkiZWNobzsiCVwKKwkiZWNobyBUeXBlIFxcXCJydW4gZmxhc2hfbmZzXFxcIiB0byBtb3VudCByb290IGZpbGVzeXN0ZW0gb3ZlciBORlM7IiBcCisJImVjaG8iCisKKyN1bmRlZglDT05GSUdfQk9PVEFSR1MJCS8qIHRoZSBib290IGNvbW1hbmQgd2lsbCBzZXQgYm9vdGFyZ3MJKi8KKworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCQlcCisJImhvc3RuYW1lPWdwM3NzYVwwIgkJCQkJCVwKKwkiYm9vdGZpbGU9L3RmdHBib290L2dwM3NzYS91SW1hZ2VcMCIJCQkJXAorCSJsb2FkYWRkcj00MDAwMDBcMCIJCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCVwKKwkiY29uc2Rldj10dHlTMVwwIgkJCQkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQkJXAorCQkibmZzcm9vdD0kc2VydmVyaXA6JHJvb3RwYXRoXDAiCQkJCVwKKwkicmFtYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSByd1wwIgkJCVwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICRib290YXJncyAiCQkJCVwKKwkJImlwPSRpcGFkZHI6JHNlcnZlcmlwOiRnYXRld2F5aXA6JG5ldG1hc2siCQlcCisJCSI6JGhvc3RuYW1lOiRuZXRkZXY6b2ZmIHBhbmljPTFcMCIJCQlcCisJImFkZGNvbnM9c2V0ZW52IGJvb3RhcmdzICRib290YXJncyAiCQkJCVwKKwkJImNvbnNvbGU9JGNvbnNkZXYsJGJhdWRyYXRlXDAiCQkJCVwKKwkiZmxhc2hfbmZzPXJ1biBuZnNhcmdzIGFkZGlwIGFkZGNvbnM7IgkJCQlcCisJCSJib290bSAka2VybmVsX2FkZHJcMCIJCQkJCVwKKwkiZmxhc2hfc2VsZj1ydW4gcmFtYXJncyBhZGRpcCBhZGRjb25zOyIJCQkJXAorCQkiYm9vdG0gJGtlcm5lbF9hZGRyICRyYW1kaXNrX2FkZHJcMCIJCQlcCisJIm5ldF9uZnM9dGZ0cCAkbG9hZGFkZHIgJGJvb3RmaWxlOyIJCQkJXAorCQkicnVuIG5mc2FyZ3MgYWRkaXAgYWRkY29ucztib290bVwwIgkJCVwKKwkicm9vdHBhdGg9L29wdC9lbGRrL3BwY184NXh4XDAiCQkJCQlcCisJImtlcm5lbF9hZGRyPUZDMDAwMDAwXDAiCQkJCQlcCisJInJhbWRpc2tfYWRkcj1GQzIwMDAwMFwwIgkJCQkJXAorCSIiCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkicnVuIGZsYXNoX3NlbGYiCisKKyNlbmRpZgkvKiBDRkdfRU5WX0lTX0lOX0VFUFJPTSAqLworCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3VjMTAxLmggYi9pbmNsdWRlL2NvbmZpZ3MvdWMxMDEuaAppbmRleCA4Y2Q4ZTliLi5mZjA2MWVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvdWMxMDEuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvdWMxMDEuaApAQCAtMTE0LDcgKzExNCw3IEBACiAvKgogICogSVBCIEJ1cyBjbG9ja2luZyBjb25maWd1cmF0aW9uLgogICovCi0jZGVmaW5lIENGR19JUEJTUEVFRF8xMzMJCS8qIGRlZmluZSBmb3IgMTMzTUh6IHNwZWVkICovCisjZGVmaW5lIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSwkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KIAogLyoKICAqIEkyQyBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvdjM4Yi5oIGIvaW5jbHVkZS9jb25maWdzL3YzOGIuaAppbmRleCBlMTk1OTFkLi4wYjdiMTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvdjM4Yi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy92MzhiLmgKQEAgLTE2Nyw3ICsxNjcsNyBAQAogLyoKICAqIElQQiBCdXMgY2xvY2tpbmcgY29uZmlndXJhdGlvbi4KICAqLwotI3VuZGVmIENGR19JUEJTUEVFRF8xMzMJCQkvKiBkZWZpbmUgZm9yIDEzM01IeiBzcGVlZCAqLworI3VuZGVmIENGR19JUEJDTEtfRVFVQUxTX1hMQkNMSwkJCS8qIGRlZmluZSBmb3IgMTMzTUh6IHNwZWVkICovCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy94dXB2MnAuaCBiL2luY2x1ZGUvY29uZmlncy94dXB2MnAuaAppbmRleCBhMmY0ODEwLi5iNGM3MjBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MveHVwdjJwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3h1cHYycC5oCkBAIC0xMzIsNiArMTMyLDggQEAKIAkJCUNGR19DTURfTE9BRFMgfFwKIAkJCUNGR19DTURfTE9BREIgfFwKIAkJCUNGR19DTURfTUlTQyB8XAorCQkJQ0ZHX0NNRF9GQVQgfFwKKwkJCUNGR19DTURfRVhUMiB8XAogCQkJQ0ZHX0NNRF9QSU5HIFwKIAkJCSkKIApAQCAtMTYzLDEyICsxNjUsMTIgQEAKIAkiYmFzZSAwOyIgXAogCSJlY2hvIgogCi0KIC8qIHN5c3RlbSBhY2UgKi8KLS8qI2RlZmluZQlDT05GSUdfU1lTVEVNQUNFCi0jZGVmaW5lCURFQlVHX1NZU1RFTUFDRQotI2RlZmluZQlDRkdfU1lTVEVNQUNFX0JBU0UJMHhDRjAwMDAwMAotI2RlZmluZQlDRkdfU1lTVEVNQUNFX1dJRFRICTE2Ci0jZGVmaW5lCUNPTkZJR19ET1NfUEFSVElUSU9OKi8KKyNkZWZpbmUJQ09ORklHX1NZU1RFTUFDRQorLyogI2RlZmluZSBERUJVR19TWVNURU1BQ0UgKi8KKyNkZWZpbmUJU1lTVEVNQUNFX0NPTkZJR19GUEdBCisjZGVmaW5lCUNGR19TWVNURU1BQ0VfQkFTRQlYSUxJTlhfU1lTQUNFX0JBU0VBRERSCisjZGVmaW5lCUNGR19TWVNURU1BQ0VfV0lEVEgJWElMSU5YX1NZU0FDRV9NRU1fV0lEVEgKKyNkZWZpbmUJQ09ORklHX0RPU19QQVJUSVRJT04KIAogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy96eWxvbml0ZS5oIGIvaW5jbHVkZS9jb25maWdzL3p5bG9uaXRlLmgKaW5kZXggYzZhYThlYy4uMWU4ZWQ3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3p5bG9uaXRlLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3p5bG9uaXRlLmgKQEAgLTE3NCw3ICsxNzQsNiBAQAogLyoKICAqIE5BTkQgRmxhc2gKICAqLwotLyogVXNlIHRoZSBuZXcgTkFORCBjb2RlLiAoQk9BUkRMSUJTID0gZHJpdmVycy9uYW5kL2xpYm5hbmQuYSByZXF1aXJlZCkgKi8KICNkZWZpbmUgQ09ORklHX05FV19OQU5EX0NPREUKICNkZWZpbmUgQ0ZHX05BTkQwX0JBU0UJCTB4MAogI3VuZGVmIENGR19OQU5EMV9CQVNFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0YXQuaCBiL2luY2x1ZGUvbGludXgvc3RhdC5oCmluZGV4IDQzZmQ1M2YuLjM3ZjI5MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RhdC5oCkBAIC02Nyw3ICs2Nyw4IEBACiAKICNlbmRpZgkvKiBfX1BQQ19fICovCiAKLSNpZiBkZWZpbmVkIChfX0FSTV9fKSB8fCBkZWZpbmVkIChfX0kzODZfXykgfHwgZGVmaW5lZCAoX19NNjhLX18pIHx8IGRlZmluZWQgKF9fYmZpbl9fKQorI2lmIGRlZmluZWQgKF9fQVJNX18pIHx8IGRlZmluZWQgKF9fSTM4Nl9fKSB8fCBkZWZpbmVkIChfX002OEtfXykgfHwgZGVmaW5lZCAoX19iZmluX18pIHx8XAorCWRlZmluZWQgKF9fbWljcm9ibGF6ZV9fKQogCiBzdHJ1Y3Qgc3RhdCB7CiAJdW5zaWduZWQgc2hvcnQgc3RfZGV2OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tcGM4M3h4LmggYi9pbmNsdWRlL21wYzgzeHguaAppbmRleCBjMmE0ZmY1Li42MGZjMjE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL21wYzgzeHguaAorKysgYi9pbmNsdWRlL21wYzgzeHguaApAQCAtOTUsNiArOTUsMTEgQEAKICNkZWZpbmUgU1BSXzgzMjFFX1JFVjExCQkJMHg4MDY2MDAxMQogI2RlZmluZSBTUFJfODMyMV9SRVYxMQkJCTB4ODA2NzAwMTEKIAorI2RlZmluZSBTUFJfODMxMV9SRVYxMAkJCTB4ODBCMzAwMTAKKyNkZWZpbmUgU1BSXzgzMTFFX1JFVjEwCQkJMHg4MEIyMDAxMAorI2RlZmluZSBTUFJfODMxM19SRVYxMAkJCTB4ODBCMTAwMTAKKyNkZWZpbmUgU1BSXzgzMTNFX1JFVjEwCQkJMHg4MEIwMDAxMAorCiAvKiBTUENSIC0gU3lzdGVtIFByaW9yaXR5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKICAqLwogI2RlZmluZSBTUENSX1BDSUhQRQkJCTB4MTAwMDAwMDAJLyogUENJIEhpZ2hlc3QgUHJpb3JpdHkgRW5hYmxlICovCkBAIC0xMjEsNiArMTI2LDE1IEBACiAjZGVmaW5lIFNQQ1JfVFNFQzJCRFBfU0hJRlQJCSgzMS0yOSkKICNkZWZpbmUgU1BDUl9UU0VDMkVQCQkJMHgwMDAwMDAwMwkvKiBUU0VDMiBlbWVyZ2VuY3kgcHJpb3JpdHkgKi8KICNkZWZpbmUgU1BDUl9UU0VDMkVQX1NISUZUCQkoMzEtMzEpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX01QQzgzMVgpCisvKiBTUENSIGJpdHMgLSBNUEM4MzF4IHNwZWNpZmljICovCisjZGVmaW5lIFNQQ1JfVFNFQ0RQCQkJMHgwMDAwMzAwMAkvKiBUU0VDIGRhdGEgcHJpb3JpdHkgKi8KKyNkZWZpbmUgU1BDUl9UU0VDRFBfU0hJRlQJCSgzMS0xOSkKKyNkZWZpbmUgU1BDUl9UU0VDRVAJCQkweDAwMDAwQzAwCS8qIFRTRUMgZW1lcmdlbmN5IHByaW9yaXR5ICovCisjZGVmaW5lIFNQQ1JfVFNFQ0VQX1NISUZUCQkoMzEtMjEpCisjZGVmaW5lIFNQQ1JfVFNFQ0JEUAkJCTB4MDAwMDAzMDAJLyogVFNFQyBidWZmZXIgZGVzY3JpcHRvciBwcmlvcml0eSAqLworI2RlZmluZSBTUENSX1RTRUNCRFBfU0hJRlQJCSgzMS0yMykKICNlbmRpZgogCiAvKiBTSUNSTC9IIC0gU3lzdGVtIEkvTyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIExvdy9IaWdoCkBAIC0xOTUsNiArMjA5LDM2IEBACiAjZGVmaW5lIFNJQ1JMX1BDSV9NU1JDCQkJMHgxMDAwMDAwMAogI2RlZmluZSBTSUNSTF9VUlRfQ1RQUgkJCTB4MDYwMDAwMDAKICNkZWZpbmUgU0lDUkxfSVJRX0NUUFIJCQkweDAwQzAwMDAwCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX01QQzgzMVgpCisvKiBTSUNSTCBiaXRzIC0gTVBDODMxeCBzcGVjaWZpYyAqLworI2RlZmluZSBTSUNSTF9MQkMJCQkweDMwMDAwMDAwCisjZGVmaW5lIFNJQ1JMX1VBUlQJCQkweDBDMDAwMDAwCisjZGVmaW5lIFNJQ1JMX1NQSV9BCQkJMHgwMzAwMDAwMAorI2RlZmluZSBTSUNSTF9TUElfQgkJCTB4MDBDMDAwMDAKKyNkZWZpbmUgU0lDUkxfU1BJX0MJCQkweDAwMzAwMDAwCisjZGVmaW5lIFNJQ1JMX1NQSV9ECQkJMHgwMDBDMDAwMAorI2RlZmluZSBTSUNSTF9VU0JEUgkJCTB4MDAwMDBDMDAKKyNkZWZpbmUgU0lDUkxfRVRTRUMxX0EJCQkweDAwMDAwMDBDCisjZGVmaW5lIFNJQ1JMX0VUU0VDMl9BCQkJMHgwMDAwMDAwMworCisvKiBTSUNSSCBiaXRzIC0gTVBDODMxeCBzcGVjaWZpYyAqLworI2RlZmluZSBTSUNSSF9JTlRSX0EJCQkweDAyMDAwMDAwCisjZGVmaW5lIFNJQ1JIX0lOVFJfQgkJCTB4MDBDMDAwMDAKKyNkZWZpbmUgU0lDUkhfSUlDCQkJMHgwMDMwMDAwMAorI2RlZmluZSBTSUNSSF9FVFNFQzJfQgkJCTB4MDAwQzAwMDAKKyNkZWZpbmUgU0lDUkhfRVRTRUMyX0MJCQkweDAwMDMwMDAwCisjZGVmaW5lIFNJQ1JIX0VUU0VDMl9ECQkJMHgwMDAwQzAwMAorI2RlZmluZSBTSUNSSF9FVFNFQzJfRQkJCTB4MDAwMDMwMDAKKyNkZWZpbmUgU0lDUkhfRVRTRUMyX0YJCQkweDAwMDAwQzAwCisjZGVmaW5lIFNJQ1JIX0VUU0VDMl9HCQkJMHgwMDAwMDMwMAorI2RlZmluZSBTSUNSSF9FVFNFQzFfQgkJCTB4MDAwMDAwODAKKyNkZWZpbmUgU0lDUkhfRVRTRUMxX0MJCQkweDAwMDAwMDYwCisjZGVmaW5lIFNJQ1JIX0dUWDFfRExZCQkJMHgwMDAwMDAwOAorI2RlZmluZSBTSUNSSF9HVFgyX0RMWQkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0lDUkhfVFNPQkkxCQkJMHgwMDAwMDAwMgorI2RlZmluZSBTSUNSSF9UU09CSTIJCQkweDAwMDAwMDAxCisKICNlbmRpZgogCiAvKiBTV0NSUiAtIFN5c3RlbSBXYXRjaGRvZyBDb250cm9sIFJlZ2lzdGVyCkBAIC0zOTMsNiArNDM3LDI4IEBACiAjZGVmaW5lIEhSQ1dIX1JPTV9MT0NfTE9DQUxfMTZCSVQJMHgwMDYwMDAwMAogI2RlZmluZSBIUkNXSF9ST01fTE9DX0xPQ0FMXzMyQklUCTB4MDA3MDAwMDAKIAorI2lmIGRlZmluZWQoQ09ORklHX01QQzgzMVgpCisjZGVmaW5lIEhSQ1dIX1JPTV9MT0NfTkFORF9TUF84QklUIAkweDAwMTAwMDAwCisjZGVmaW5lIEhSQ1dIX1JPTV9MT0NfTkFORF9TUF8xNkJJVAkweDAwMjAwMDAwCisjZGVmaW5lIEhSQ1dIX1JPTV9MT0NfTkFORF9MUF84QklUIAkweDAwNTAwMDAwCisjZGVmaW5lIEhSQ1dIX1JPTV9MT0NfTkFORF9MUF8xNkJJVAkweDAwNjAwMDAwCisKKyNkZWZpbmUgSFJDV0hfUkxfRVhUX0xFR0FDWQkJMHgwMDAwMDAwMAorI2RlZmluZSBIUkNXSF9STF9FWFRfTkFORAkJMHgwMDA0MDAwMAorCisjZGVmaW5lIEhSQ1dIX1RTRUMxTV9JTl9NSUkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgSFJDV0hfVFNFQzFNX0lOX1JNSUkJCTB4MDAwMDIwMDAKKyNkZWZpbmUgSFJDV0hfVFNFQzFNX0lOX1JHTUlJCQkweDAwMDA2MDAwCisjZGVmaW5lIEhSQ1dIX1RTRUMxTV9JTl9SVEJJCQkweDAwMDBBMDAwCisjZGVmaW5lIEhSQ1dIX1RTRUMxTV9JTl9TR01JSQkJMHgwMDAwQzAwMAorCisjZGVmaW5lIEhSQ1dIX1RTRUMyTV9JTl9NSUkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgSFJDV0hfVFNFQzJNX0lOX1JNSUkJCTB4MDAwMDA0MDAKKyNkZWZpbmUgSFJDV0hfVFNFQzJNX0lOX1JHTUlJCQkweDAwMDAwQzAwCisjZGVmaW5lIEhSQ1dIX1RTRUMyTV9JTl9SVEJJCQkweDAwMDAxNDAwCisjZGVmaW5lIEhSQ1dIX1RTRUMyTV9JTl9TR01JSQkJMHgwMDAwMTgwMAorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19NUEM4MzRYKQogI2RlZmluZSBIUkNXSF9UU0VDMU1fSU5fUkdNSUkJCTB4MDAwMDAwMDAKICNkZWZpbmUgSFJDV0hfVFNFQzFNX0lOX1JUQkkJCTB4MDAwMDQwMDAKQEAgLTUyMyw2ICs1ODksMTggQEAKICNkZWZpbmUgU0NDUl9UU0VDMkNNXzEJCQkweDEwMDAwMDAwCiAjZGVmaW5lIFNDQ1JfVFNFQzJDTV8yCQkJMHgyMDAwMDAwMAogI2RlZmluZSBTQ0NSX1RTRUMyQ01fMwkJCTB4MzAwMDAwMDAKKworI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODMxWCkKKy8qIFRTRUMxIGJpdHMgYXJlIGZvciBUU0VDMiBhcyB3ZWxsICovCisjZGVmaW5lIFNDQ1JfVFNFQzFDTQkJCTB4YzAwMDAwMDAKKyNkZWZpbmUgU0NDUl9UU0VDMUNNX1NISUZUCQkzMAorI2RlZmluZSBTQ0NSX1RTRUMxQ01fMQkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0NDUl9UU0VDMUNNXzIJCQkweDgwMDAwMDAwCisjZGVmaW5lIFNDQ1JfVFNFQzFDTV8zCQkJMHhDMDAwMDAwMAorCisjZGVmaW5lIFNDQ1JfVFNFQzFPTgkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgU0NDUl9UU0VDMk9OCQkJMHgxMDAwMDAwMAorCiAjZW5kaWYKIAogI2RlZmluZSBTQ0NSX1VTQk1QSENNCQkJMHgwMGMwMDAwMApAQCAtNTU2LDYgKzYzNCwyNSBAQAogI2RlZmluZSBDU0NPTkZJR19DT0xfQklUXzEwCQkweDAwMDAwMDAyCiAjZGVmaW5lIENTQ09ORklHX0NPTF9CSVRfMTEJCTB4MDAwMDAwMDMKIAorLyogVElNSU5HX0NGR18wIC0gRERSIFNEUkFNIFRpbWluZyBDb25maWd1cmF0aW9uIDAKKyAqLworI2RlZmluZSBUSU1JTkdfQ0ZHMF9SV1QJCQkweEMwMDAwMDAwCisjZGVmaW5lIFRJTUlOR19DRkcwX1JXVF9TSElGVAkJMzAKKyNkZWZpbmUgVElNSU5HX0NGRzBfV1JUCQkJMHgzMDAwMDAwMAorI2RlZmluZSBUSU1JTkdfQ0ZHMF9XUlRfU0hJRlQJCTI4CisjZGVmaW5lIFRJTUlOR19DRkcwX1JSVAkJCTB4MEMwMDAwMDAKKyNkZWZpbmUgVElNSU5HX0NGRzBfUlJUX1NISUZUCQkyNgorI2RlZmluZSBUSU1JTkdfQ0ZHMF9XV1QJCQkweDAzMDAwMDAwCisjZGVmaW5lIFRJTUlOR19DRkcwX1dXVF9TSElGVAkJMjQKKyNkZWZpbmUgVElNSU5HX0NGRzBfQUNUX1BEX0VYSVQJCTB4MDA3MDAwMDAKKyNkZWZpbmUgVElNSU5HX0NGRzBfQUNUX1BEX0VYSVRfU0hJRlQJMjAKKyNkZWZpbmUgVElNSU5HX0NGRzBfUFJFX1BEX0VYSVQJCTB4MDAwNzAwMDAKKyNkZWZpbmUgVElNSU5HX0NGRzBfUFJFX1BEX0VYSVRfU0hJRlQJMTYKKyNkZWZpbmUgVElNSU5HX0NGRzBfT0RUX1BEX0VYSVQJCTB4MDAwMDBGMDAKKyNkZWZpbmUgVElNSU5HX0NGRzBfT0RUX1BEX0VYSVRfU0hJRlQJOAorI2RlZmluZSBUSU1JTkdfQ0ZHMF9NUlNfQ1lDCQkweDAwMDAwRjAwCisjZGVmaW5lIFRJTUlOR19DRkcwX01SU19DWUNfU0hJRlQJMAorCiAvKiBUSU1JTkdfQ0ZHXzEgLSBERFIgU0RSQU0gVGltaW5nIENvbmZpZ3VyYXRpb24gMQogICovCiAjZGVmaW5lIFRJTUlOR19DRkcxX1BSRVRPQUNUCQkweDcwMDAwMDAwCkBAIC01ODYsNiArNjgzLDE3IEBACiAjZGVmaW5lIFRJTUlOR19DRkcyX1dSX0RBVEFfREVMQVlfU0hJRlQJMTAKICNkZWZpbmUgVElNSU5HX0NGRzJfQ1BPX0RFRgkJMHgwMDAwMDAwMAkvKiBkZWZhdWx0ICg9IENBU0xBVCArIDEpICovCiAKKyNkZWZpbmUgVElNSU5HX0NGRzJfQUREX0xBVAkJMHg3MDAwMDAwMAorI2RlZmluZSBUSU1JTkdfQ0ZHMl9BRERfTEFUX1NISUZUCTI4CisjZGVmaW5lIFRJTUlOR19DRkcyX1dSX0xBVF9ERUxBWQkweDAwMzgwMDAwCisjZGVmaW5lIFRJTUlOR19DRkcyX1dSX0xBVF9ERUxBWV9TSElGVAkxOQorI2RlZmluZSBUSU1JTkdfQ0ZHMl9SRF9UT19QUkUJCTB4MDAwMEUwMDAKKyNkZWZpbmUgVElNSU5HX0NGRzJfUkRfVE9fUFJFX1NISUZUCTEzCisjZGVmaW5lIFRJTUlOR19DRkcyX0NLRV9QTFMJCTB4MDAwMDAxQzAKKyNkZWZpbmUgVElNSU5HX0NGRzJfQ0tFX1BMU19TSElGVAk2CisjZGVmaW5lIFRJTUlOR19DRkcyX0ZPVVJfQUNUCQkweDAwMDAwMDNGCisjZGVmaW5lIFRJTUlOR19DRkcyX0ZPVVJfQUNUX1NISUZUCTAKKwogLyogRERSX1NEUkFNX0NGRyAtIEREUiBTRFJBTSBDb250cm9sIENvbmZpZ3VyYXRpb24KICAqLwogI2RlZmluZSBTRFJBTV9DRkdfTUVNX0VOCQkweDgwMDAwMDAwCkBAIC01OTMsMTMgKzcwMSwxNCBAQAogI2RlZmluZSBTRFJBTV9DRkdfRUNDX0VOCQkweDIwMDAwMDAwCiAjZGVmaW5lIFNEUkFNX0NGR19SRF9FTgkJCTB4MTAwMDAwMDAKICNkZWZpbmUgU0RSQU1fQ0ZHX1NEUkFNX1RZUEUJCTB4MDMwMDAwMDAKKyNkZWZpbmUgU0RSQU1fQ0ZHX1NEUkFNX1RZUEVfRERSCTB4MDIwMDAwMDAKICNkZWZpbmUgU0RSQU1fQ0ZHX1NEUkFNX1RZUEVfU0hJRlQJMjQKICNkZWZpbmUgU0RSQU1fQ0ZHX0RZTl9QV1IJCTB4MDAyMDAwMDAKICNkZWZpbmUgU0RSQU1fQ0ZHXzMyX0JFCQkJMHgwMDA4MDAwMAogI2RlZmluZSBTRFJBTV9DRkdfOF9CRQkJCTB4MDAwNDAwMDAKICNkZWZpbmUgU0RSQU1fQ0ZHX05DQVAJCQkweDAwMDIwMDAwCiAjZGVmaW5lIFNEUkFNX0NGR18yVF9FTgkJCTB4MDAwMDgwMDAKLSNkZWZpbmUgU0RSQU1fQ0ZHX1NEUkFNX1RZUEVfRERSCTB4MDIwMDAwMDAKKyNkZWZpbmUgU0RSQU1fQ0ZHX0JJCQkJMHgwMDAwMDAwMQogCiAvKiBERFJfU0RSQU1fTU9ERSAtIEREUiBTRFJBTSBNb2RlIFJlZ2lzdGVyCiAgKi8KQEAgLTczMiwxMSArODQxLDE1IEBACiAjZGVmaW5lIEJSX1BTXzMyCQkJMHgwMDAwMTgwMAkvKiBQb3J0IFNpemUgMzIgYml0ICovCiAjZGVmaW5lIEJSX0RFQ0MJCQkJMHgwMDAwMDYwMAogI2RlZmluZSBCUl9ERUNDX1NISUZUCQkJOQorI2RlZmluZSBCUl9ERUNDX09GRgkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQlJfREVDQ19DSEsJCQkweDAwMDAwMjAwCisjZGVmaW5lIEJSX0RFQ0NfQ0hLX0dFTgkJCTB4MDAwMDA0MDAKICNkZWZpbmUgQlJfV1AJCQkJMHgwMDAwMDEwMAogI2RlZmluZSBCUl9XUF9TSElGVAkJCTgKICNkZWZpbmUgQlJfTVNFTAkJCQkweDAwMDAwMEUwCiAjZGVmaW5lIEJSX01TRUxfU0hJRlQJCQk1CiAjZGVmaW5lIEJSX01TX0dQQ00JCQkweDAwMDAwMDAwCS8qIEdQQ00gKi8KKyNkZWZpbmUgQlJfTVNfRkNNCQkJMHgwMDAwMDAyMAkvKiBGQ00gKi8KICNkZWZpbmUgQlJfTVNfU0RSQU0JCQkweDAwMDAwMDYwCS8qIFNEUkFNICovCiAjZGVmaW5lIEJSX01TX1VQTUEJCQkweDAwMDAwMDgwCS8qIFVQTUEgKi8KICNkZWZpbmUgQlJfTVNfVVBNQgkJCTB4MDAwMDAwQTAJLyogVVBNQiAqLwpAQCAtODAzLDYgKzkxNiwzNCBAQAogI2RlZmluZSBPUl9HUENNX0VBRAkJCTB4MDAwMDAwMDEKICNkZWZpbmUgT1JfR1BDTV9FQURfU0hJRlQJCTAKIAorI2RlZmluZSBPUl9GQ01fQU0JCQkweEZGRkY4MDAwCisjZGVmaW5lIE9SX0ZDTV9BTV9TSElGVAkJCQkxNQorI2RlZmluZSBPUl9GQ01fQkNUTEQJCQkweDAwMDAxMDAwCisjZGVmaW5lIE9SX0ZDTV9CQ1RMRF9TSElGVAkJCTEyCisjZGVmaW5lIE9SX0ZDTV9QR1MJCQkweDAwMDAwNDAwCisjZGVmaW5lIE9SX0ZDTV9QR1NfU0hJRlQJCQkxMAorI2RlZmluZSBPUl9GQ01fQ1NDVAkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgT1JfRkNNX0NTQ1RfU0hJRlQJCQkgOQorI2RlZmluZSBPUl9GQ01fQ1NUCQkJMHgwMDAwMDEwMAorI2RlZmluZSBPUl9GQ01fQ1NUX1NISUZUCQkJIDgKKyNkZWZpbmUgT1JfRkNNX0NIVAkJCTB4MDAwMDAwODAKKyNkZWZpbmUgT1JfRkNNX0NIVF9TSElGVAkJCSA3CisjZGVmaW5lIE9SX0ZDTV9TQ1kJCQkweDAwMDAwMDcwCisjZGVmaW5lIE9SX0ZDTV9TQ1lfU0hJRlQJCQkgNAorI2RlZmluZSBPUl9GQ01fU0NZXzEJCQkweDAwMDAwMDEwCisjZGVmaW5lIE9SX0ZDTV9TQ1lfMgkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgT1JfRkNNX1NDWV8zCQkJMHgwMDAwMDAzMAorI2RlZmluZSBPUl9GQ01fU0NZXzQJCQkweDAwMDAwMDQwCisjZGVmaW5lIE9SX0ZDTV9TQ1lfNQkJCTB4MDAwMDAwNTAKKyNkZWZpbmUgT1JfRkNNX1NDWV82CQkJMHgwMDAwMDA2MAorI2RlZmluZSBPUl9GQ01fU0NZXzcJCQkweDAwMDAwMDcwCisjZGVmaW5lIE9SX0ZDTV9SU1QJCQkweDAwMDAwMDA4CisjZGVmaW5lIE9SX0ZDTV9SU1RfU0hJRlQJCQkgMworI2RlZmluZSBPUl9GQ01fVFJMWAkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgT1JfRkNNX1RSTFhfU0hJRlQJCQkgMgorI2RlZmluZSBPUl9GQ01fRUhUUgkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgT1JfRkNNX0VIVFJfU0hJRlQJCQkgMQorCiAjZGVmaW5lIE9SX1VQTV9BTQkJCTB4RkZGRjgwMDAKICNkZWZpbmUgT1JfVVBNX0FNX1NISUZUCQkJMTUKICNkZWZpbmUgT1JfVVBNX1hBTQkJCTB4MDAwMDYwMDAKQEAgLTEwMTksNCArMTE2MCwxMTggQEAKICNkZWZpbmUgUElXQVJfSVdTXzFHCQkJMHgwMDAwMDAxRAogI2RlZmluZSBQSVdBUl9JV1NfMkcJCQkweDAwMDAwMDFFCiAKKy8qIFBNQ0NSMSAtIFBDSSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAqLworI2RlZmluZSBQTUNDUjFfUE9XRVJfT0ZGCQkweDAwMDAwMDIwCisKKy8qIEZNUiAtIEZsYXNoIE1vZGUgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBGTVJfQ1dUTwkJMHgwMDAwRjAwMAorI2RlZmluZSBGTVJfQ1dUT19TSElGVAkJMTIKKyNkZWZpbmUgRk1SX0JPT1QJCTB4MDAwMDA4MDAKKyNkZWZpbmUgRk1SX0VDQ00JCTB4MDAwMDAxMDAKKyNkZWZpbmUgRk1SX0FMCQkJMHgwMDAwMDAzMAorI2RlZmluZSBGTVJfQUxfU0hJRlQJCTQKKyNkZWZpbmUgRk1SX09QCQkJMHgwMDAwMDAwMworI2RlZmluZSBGTVJfT1BfU0hJRlQJCTAKKworLyogRklSIC0gRmxhc2ggSW5zdHJ1Y3Rpb24gUmVnaXN0ZXIKKyAqLworI2RlZmluZSBGSVJfT1AwCQkJMHhGMDAwMDAwMAorI2RlZmluZSBGSVJfT1AwX1NISUZUCQkyOAorI2RlZmluZSBGSVJfT1AxCQkJMHgwRjAwMDAwMAorI2RlZmluZSBGSVJfT1AxX1NISUZUCQkyNAorI2RlZmluZSBGSVJfT1AyCQkJMHgwMEYwMDAwMAorI2RlZmluZSBGSVJfT1AyX1NISUZUCQkyMAorI2RlZmluZSBGSVJfT1AzCQkJMHgwMDBGMDAwMAorI2RlZmluZSBGSVJfT1AzX1NISUZUCQkxNgorI2RlZmluZSBGSVJfT1A0CQkJMHgwMDAwRjAwMAorI2RlZmluZSBGSVJfT1A0X1NISUZUCQkxMgorI2RlZmluZSBGSVJfT1A1CQkJMHgwMDAwMEYwMAorI2RlZmluZSBGSVJfT1A1X1NISUZUCQk4CisjZGVmaW5lIEZJUl9PUDYJCQkweDAwMDAwMEYwCisjZGVmaW5lIEZJUl9PUDZfU0hJRlQJCTQKKyNkZWZpbmUgRklSX09QNwkJCTB4MDAwMDAwMEYKKyNkZWZpbmUgRklSX09QN19TSElGVAkJMAorI2RlZmluZSBGSVJfT1BfTk9QCQkweDAgLyogTm8gb3BlcmF0aW9uIGFuZCBlbmQgb2Ygc2VxdWVuY2UgKi8KKyNkZWZpbmUgRklSX09QX0NBCQkweDEgLyogSXNzdWUgY3VycmVudCBjb2x1bW4gYWRkcmVzcyAqLworI2RlZmluZSBGSVJfT1BfUEEJCTB4MiAvKiBJc3N1ZSBjdXJyZW50IGJsb2NrK3BhZ2UgYWRkcmVzcyAqLworI2RlZmluZSBGSVJfT1BfVUEJCTB4MyAvKiBJc3N1ZSB1c2VyIGRlZmluZWQgYWRkcmVzcyAqLworI2RlZmluZSBGSVJfT1BfQ00wCQkweDQgLyogSXNzdWUgY29tbWFuZCBmcm9tIEZDUltDTUQwXSAqLworI2RlZmluZSBGSVJfT1BfQ00xCQkweDUgLyogSXNzdWUgY29tbWFuZCBmcm9tIEZDUltDTUQxXSAqLworI2RlZmluZSBGSVJfT1BfQ00yCQkweDYgLyogSXNzdWUgY29tbWFuZCBmcm9tIEZDUltDTUQyXSAqLworI2RlZmluZSBGSVJfT1BfQ00zCQkweDcgLyogSXNzdWUgY29tbWFuZCBmcm9tIEZDUltDTUQzXSAqLworI2RlZmluZSBGSVJfT1BfV0IJCTB4OCAvKiBXcml0ZSBGQkNSIGJ5dGVzIGZyb20gRkNNIGJ1ZmZlciAqLworI2RlZmluZSBGSVJfT1BfV1MJCTB4OSAvKiBXcml0ZSAxIG9yIDIgYnl0ZXMgZnJvbSBNRFJbQVNdICovCisjZGVmaW5lIEZJUl9PUF9SQgkJMHhBIC8qIFJlYWQgRkJDUiBieXRlcyB0byBGQ00gYnVmZmVyICovCisjZGVmaW5lIEZJUl9PUF9SUwkJMHhCIC8qIFJlYWQgMSBvciAyIGJ5dGVzIHRvIE1EUltBU10gKi8KKyNkZWZpbmUgRklSX09QX0NXMAkJMHhDIC8qIFdhaXQgdGhlbiBpc3N1ZSBGQ1JbQ01EMF0gKi8KKyNkZWZpbmUgRklSX09QX0NXMQkJMHhEIC8qIFdhaXQgdGhlbiBpc3N1ZSBGQ1JbQ01EMV0gKi8KKyNkZWZpbmUgRklSX09QX1JCVwkJMHhFIC8qIFdhaXQgdGhlbiByZWFkIEZCQ1IgYnl0ZXMgKi8KKyNkZWZpbmUgRklSX09QX1JTVwkJMHhGIC8qIFdhaXQgdGhlbiByZWFkIDEgb3IgMiBieXRlcyAqLworCisvKiBGQ1IgLSBGbGFzaCBDb21tYW5kIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRkNSX0NNRDAJCTB4RkYwMDAwMDAKKyNkZWZpbmUgRkNSX0NNRDBfU0hJRlQJCTI0CisjZGVmaW5lIEZDUl9DTUQxCQkweDAwRkYwMDAwCisjZGVmaW5lIEZDUl9DTUQxX1NISUZUCQkxNgorI2RlZmluZSBGQ1JfQ01EMgkJMHgwMDAwRkYwMAorI2RlZmluZSBGQ1JfQ01EMl9TSElGVCAgIAk4CisjZGVmaW5lIEZDUl9DTUQzCQkweDAwMDAwMEZGCisjZGVmaW5lIEZDUl9DTUQzX1NISUZUCQkwCisKKy8qIEZCQVIgLSBGbGFzaCBCbG9jayBBZGRyZXNzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRkJBUl9CTEsJCTB4MDBGRkZGRkYKKworLyogRlBBUiAtIEZsYXNoIFBhZ2UgQWRkcmVzcyBSZWdpc3RlcgorICovCisjZGVmaW5lIEZQQVJfU1BfUEkJCTB4MDAwMDdDMDAKKyNkZWZpbmUgRlBBUl9TUF9QSV9TSElGVAkxMAorI2RlZmluZSBGUEFSX1NQX01TCQkweDAwMDAwMjAwCisjZGVmaW5lIEZQQVJfU1BfQ0kJCTB4MDAwMDAxRkYKKyNkZWZpbmUgRlBBUl9TUF9DSV9TSElGVAkwCisjZGVmaW5lIEZQQVJfTFBfUEkJCTB4MDAwM0YwMDAKKyNkZWZpbmUgRlBBUl9MUF9QSV9TSElGVAkxMgorI2RlZmluZSBGUEFSX0xQX01TCQkweDAwMDAwODAwCisjZGVmaW5lIEZQQVJfTFBfQ0kJCTB4MDAwMDA3RkYKKyNkZWZpbmUgRlBBUl9MUF9DSV9TSElGVAkwCisKKy8qIExURVNSIC0gVHJhbnNmZXIgRXJyb3IgU3RhdHVzIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgTFRFU1JfQk0JCTB4ODAwMDAwMDAKKyNkZWZpbmUgTFRFU1JfRkNUIAkJMHg0MDAwMDAwMAorI2RlZmluZSBMVEVTUl9QQVIgCQkweDIwMDAwMDAwCisjZGVmaW5lIExURVNSX1dQCQkweDA0MDAwMDAwCisjZGVmaW5lIExURVNSX0FUTVcJCTB4MDA4MDAwMDAKKyNkZWZpbmUgTFRFU1JfQVRNUgkJMHgwMDQwMDAwMAorI2RlZmluZSBMVEVTUl9DUwkJMHgwMDA4MDAwMAorI2RlZmluZSBMVEVTUl9DQwkJMHgwMDAwMDAwMQorCisvKiBERFIgQ29udHJvbCBEcml2ZXIgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBERFJDRFJfRU4JCTB4NDAwMDAwMDAKKyNkZWZpbmUgRERSQ0RSX1BaCQkweDNDMDAwMDAwCisjZGVmaW5lIEREUkNEUl9QWl9NQVhaCQkweDAwMDAwMDAwCisjZGVmaW5lIEREUkNEUl9QWl9ISVoJCTB4MjAwMDAwMDAKKyNkZWZpbmUgRERSQ0RSX1BaX05PTVoJCTB4MzAwMDAwMDAKKyNkZWZpbmUgRERSQ0RSX1BaX0xPWgkJMHgzODAwMDAwMAorI2RlZmluZSBERFJDRFJfUFpfTUlOWgkJMHgzQzAwMDAwMAorI2RlZmluZSBERFJDRFJfTloJCTB4M0MwMDAwMDAKKyNkZWZpbmUgRERSQ0RSX05aX01BWFoJCTB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ0RSX05aX0hJWgkJMHgwMjAwMDAwMAorI2RlZmluZSBERFJDRFJfTlpfTk9NWgkJMHgwMzAwMDAwMAorI2RlZmluZSBERFJDRFJfTlpfTE9aCQkweDAzODAwMDAwCisjZGVmaW5lIEREUkNEUl9OWl9NSU5aCQkweDAzQzAwMDAwCisjZGVmaW5lIEREUkNEUl9PRFQJCTB4MDAwODAwMDAKKyNkZWZpbmUgRERSQ0RSX0REUl9DRkcJCTB4MDAwNDAwMDAKKyNkZWZpbmUgRERSQ0RSX01fT0RSCQkweDAwMDAwMDAyCisjZGVmaW5lIEREUkNEUl9RX0RSTgkJMHgwMDAwMDAwMQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IHBjaV9yZWdpb247Cit2b2lkIG1wYzgzeHhfcGNpX2luaXQoaW50IG51bV9idXNlcywgc3RydWN0IHBjaV9yZWdpb24gKipyZWcsIGludCB3YXJtYm9vdCk7CisjZW5kaWYKKwogI2VuZGlmCS8qIF9fTVBDODNYWF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXBjODZ4eC5oIGIvaW5jbHVkZS9tcGM4Nnh4LmgKaW5kZXggYmM4YmEzZi4uNjczYmZlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tcGM4Nnh4LmgKKysrIGIvaW5jbHVkZS9tcGM4Nnh4LmgKQEAgLTksNiArOSwxNSBAQAogCiAjZGVmaW5lIEVYQ19PRkZfU1lTX1JFU0VUCTB4MDEwMAkvKiBTeXN0ZW0gcmVzZXQJb2Zmc2V0ICovCiAKKworLyoKKyAqIHBsYXRmb3JtIHJlZ2lzdGVyIGFkZHJlc3NlcworICovCisKKyNkZWZpbmUgR1VUU19TVlIJKENGR19DQ1NSQkFSICsgMHhFMDBBNCkKKyNkZWZpbmUgTUNNX0FCQ1IJKENGR19DQ1NSQkFSICsgMHgwMTAwMCkKKyNkZWZpbmUgTUNNX0RCQ1IJKENGR19DQ1NSQkFSICsgMHgwMTAwOCkKKwogLyoKICAqIGwyY3IgdmFsdWVzLiAgTG9vayBpbiBjb25maWdfPEJPQVJEPi5oIGZvciB0aGUgYWN0dWFsIHNldHVwCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHBjNDA1LmggYi9pbmNsdWRlL3BwYzQwNS5oCmluZGV4IGEyNTAzYTkuLjcxYWQxMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHBjNDA1LmgKKysrIGIvaW5jbHVkZS9wcGM0MDUuaApAQCAtNTQ3LDggKzU0Nyw4IEBACiAjZGVmaW5lIHNkcmNmZ2EgKFNEUl9EQ1JfQkFTRSsweDApCS8qIEFERFIgKi8KICNkZWZpbmUgc2RyY2ZnZCAoU0RSX0RDUl9CQVNFKzB4MSkJLyogRGF0YSAqLwogCi0jZGVmaW5lIG10c2RyKHJlZywgZGF0YSkgbXRkY3Ioc2RyY2ZnYSxyZWcpO210ZGNyKHNkcmNmZ2QsZGF0YSkKLSNkZWZpbmUgbWZzZHIocmVnLCBkYXRhKSBtdGRjcihzZHJjZmdhLHJlZyk7ZGF0YSA9IG1mZGNyKHNkcmNmZ2QpCisjZGVmaW5lIG10c2RyKHJlZywgZGF0YSkJZG8geyBtdGRjcihzZHJjZmdhLHJlZyk7bXRkY3Ioc2RyY2ZnZCxkYXRhKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbWZzZHIocmVnLCBkYXRhKQlkbyB7IG10ZGNyKHNkcmNmZ2EscmVnKTtkYXRhID0gbWZkY3Ioc2RyY2ZnZCk7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgc2RybmFuZDAJMHg0MDAwCiAjZGVmaW5lIHNkcnVsdHJhMAkweDQwNDAKQEAgLTU1Niw2ICs1NTYsMTEgQEAKICNkZWZpbmUgc2RyaWNpbnRzdGF0CTB4NDUxMAogCiAjZGVmaW5lIFNEUl9OQU5EMF9OREVOCQkweDgwMDAwMDAwCisjZGVmaW5lIFNEUl9OQU5EMF9OREJURU4JMHg0MDAwMDAwMAorI2RlZmluZSBTRFJfTkFORDBfTkRCQURSX01BU0sJMHgzMDAwMDAwMAorI2RlZmluZSBTRFJfTkFORDBfTkRCUEdfTUFTSwkweDBmMDAwMDAwCisjZGVmaW5lIFNEUl9OQU5EMF9OREFSRU4JMHgwMDgwMDAwMAorI2RlZmluZSBTRFJfTkFORDBfTkRSQkVOCTB4MDA0MDAwMDAKIAogI2RlZmluZSBTRFJfVUxUUkEwX05ER1BJT0JQCTB4ODAwMDAwMDAKICNkZWZpbmUgU0RSX1VMVFJBMF9DU05fTUFTSwkweDc4MDAwMDAwCkBAIC01NjMsNiArNTY4LDkgQEAKICNkZWZpbmUgU0RSX1VMVFJBMF9DU05TRUwxCTB4MjAwMDAwMDAKICNkZWZpbmUgU0RSX1VMVFJBMF9DU05TRUwyCTB4MTAwMDAwMDAKICNkZWZpbmUgU0RSX1VMVFJBMF9DU05TRUwzCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0RSX1VMVFJBMF9FQkNSRFlFTgkweDA0MDAwMDAwCisjZGVmaW5lIFNEUl9VTFRSQTBfU1BJU1NJTkVOCTB4MDIwMDAwMDAKKyNkZWZpbmUgU0RSX1VMVFJBMF9ORlNSU1RFTgkweDAxMDAwMDAwCiAKICNkZWZpbmUgU0RSX1VMVFJBMV9MRURORU5BQkxFCTB4NDAwMDAwMDAKIApAQCAtNTkzLDggKzYwMSw4IEBACiAvKgogICogTWFjcm8gZm9yIGFjY2Vzc2luZyB0aGUgaW5kaXJlY3QgQ1BSIHJlZ2lzdGVyCiAgKi8KLSNkZWZpbmUgbXRjcHIocmVnLCBkYXRhKSAgbXRkY3IoY3ByY2ZnYSxyZWcpO210ZGNyKGNwcmNmZ2QsZGF0YSkKLSNkZWZpbmUgbWZjcHIocmVnLCBkYXRhKSAgbXRkY3IoY3ByY2ZnYSxyZWcpO2RhdGEgPSBtZmRjcihjcHJjZmdkKQorI2RlZmluZSBtdGNwcihyZWcsIGRhdGEpCWRvIHsgbXRkY3IoY3ByY2ZnYSxyZWcpO210ZGNyKGNwcmNmZ2QsZGF0YSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1mY3ByKHJlZywgZGF0YSkJZG8geyBtdGRjcihjcHJjZmdhLHJlZyk7ZGF0YSA9IG1mZGNyKGNwcmNmZ2QpOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIENQUl9DTEtVUERfRU5QTExDSF9FTiAgMHg0MDAwMDAwMCAgICAgLyogRW5hYmxlIENQUiBQTEwgQ2hhbmdlcyAqLwogI2RlZmluZSBDUFJfQ0xLVVBEX0VORFZDSF9FTiAgIDB4MjAwMDAwMDAgICAgIC8qIEVuYWJsZSBDUFIgU3lzLiBEaXYuIENoYW5nZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHBjNDQwLmggYi9pbmNsdWRlL3BwYzQ0MC5oCmluZGV4IGJjMWQ3YWEuLjA3Zjc1ZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHBjNDQwLmgKKysrIGIvaW5jbHVkZS9wcGM0NDAuaApAQCAtMTQyNSw5ICsxNDI1LDYgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgQ2xvY2sgLyBQb3dlci1vbi1yZXNldCBEQ1Incy4KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgQ1BSMF9DRkdBRERSCQkJMHgwMEMKLSNkZWZpbmUgQ1BSMF9DRkdEQVRBCQkJMHgwMEQKLQogI2RlZmluZSBDUFIwX0NMS1VQRAkJCTB4MjAKICNkZWZpbmUgQ1BSMF9DTEtVUERfQlNZX01BU0sJCTB4ODAwMDAwMDAKICNkZWZpbmUgQ1BSMF9DTEtVUERfQlNZX0NPTVBMRVRFRAkweDAwMDAwMDAwCkBAIC0zMzE0LDYgKzMzMTEsMjMgQEAKICNkZWZpbmUgbXRzZHIocmVnLCBkYXRhKQlkbyB7IG10ZGNyKHNkcmNmZ2EscmVnKTttdGRjcihzZHJjZmdkLGRhdGEpOyB9IHdoaWxlICgwKQogI2RlZmluZSBtZnNkcihyZWcsIGRhdGEpCWRvIHsgbXRkY3Ioc2RyY2ZnYSxyZWcpO2RhdGEgPSBtZmRjcihzZHJjZmdkKTsgfSB3aGlsZSAoMCkKIAorLyoKKyAqIEFsbCA0NHggZXhjZXB0IDQ0MEdQIGhhdmUgQ1BSIHJlZ2lzdGVycyAoaW5kaXJlY3QgRENSKQorICovCisjaWYgIWRlZmluZWQoQ09ORklHXzQ0MEdQKQorI2RlZmluZSBDUFIwX0NGR0FERFIJCTB4MDBDCisjZGVmaW5lIENQUjBfQ0ZHREFUQQkJMHgwMEQKKworI2RlZmluZSBtdGNwcihyZWcsIGRhdGEpCWRvIHsgXAorCQltdGRjcihDUFIwX0NGR0FERFIsIHJlZyk7IFwKKwkJbXRkY3IoQ1BSMF9DRkdEQVRBLCBkYXRhKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgbWZjcHIocmVnLCBkYXRhKQlkbyB7IFwKKwkJbXRkY3IoQ1BSMF9DRkdBRERSLCByZWcpOyBcCisJCWRhdGEgPSBtZmRjcihDUFIwX0NGR0RBVEEpOyBcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3N0YXR1c19sZWQuaCBiL2luY2x1ZGUvc3RhdHVzX2xlZC5oCmluZGV4IGRiNGM2MGYuLjcxYTIwMmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc3RhdHVzX2xlZC5oCisrKyBiL2luY2x1ZGUvc3RhdHVzX2xlZC5oCkBAIC0zNTUsNiArMzU1LDE4IEBACiAjIGRlZmluZSBTVEFUVVNfTEVEX0FDVElWRQkwCQkvKiBMRUQgb24gZm9yIGJpdCA9PSAwICovCiAjIGRlZmluZSBTVEFUVVNfTEVEX0JPT1QJMAkJLyogTEVEIDAgdXNlZCBmb3IgYm9vdCBzdGF0dXMgKi8KIAorI2VsaWYgZGVmaW5lZChDT05GSUdfTU9USU9OUFJPKQorCisjZGVmaW5lIFNUQVRVU19MRURfQklUCQkoKHZ1X2xvbmcgKikgTVBDNVhYWF9HUFQ2X0VOQUJMRSkKKyNkZWZpbmUgU1RBVFVTX0xFRF9QRVJJT0QJKENGR19IWiAvIDEwKQorI2RlZmluZSBTVEFUVVNfTEVEX1NUQVRFCVNUQVRVU19MRURfQkxJTktJTkcKKworI2RlZmluZSBTVEFUVVNfTEVEX0JJVDEJCSgodnVfbG9uZyAqKSBNUEM1WFhYX0dQVDdfRU5BQkxFKQorI2RlZmluZSBTVEFUVVNfTEVEX1BFUklPRDEJKENGR19IWiAvIDEwKQorI2RlZmluZSBTVEFUVVNfTEVEX1NUQVRFMQlTVEFUVVNfTEVEX09GRgorCisjZGVmaW5lIFNUQVRVU19MRURfQk9PVAkJMAkvKiBMRUQgMCB1c2VkIGZvciBib290IHN0YXR1cyAqLworCiAjZWxzZQogIyBlcnJvciBTdGF0dXMgTEVEIGNvbmZpZ3VyYXRpb24gbWlzc2luZwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJfcHBjL2JvYXJkLmMgYi9saWJfcHBjL2JvYXJkLmMKaW5kZXggMjRlOGU5Ny4uYzRmYzU4MCAxMDA2NDQKLS0tIGEvbGliX3BwYy9ib2FyZC5jCisrKyBiL2xpYl9wcGMvYm9hcmQuYwpAQCAtNzYsNyArNzYsNyBAQAogZXh0ZXJuIGludCB1cGRhdGVfZmxhc2hfc2l6ZSAoaW50IGZsYXNoX3NpemUpOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TT0xJRENBUkQzKQorI2lmIGRlZmluZWQoQ09ORklHX1NDMykKIGV4dGVybiB2b2lkIHNjM19yZWFkX2VlcHJvbSh2b2lkKTsKICNlbmRpZgogCkBAIC0zMTAsMTAgKzMxMCw2IEBACiAJcHJ0XzgyNjBfY2xrcywKICNlbmRpZiAvKiBDT05GSUdfODI2MCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDODNYWCkKLQlwcmludF9jbG9ja19jb25mLAotI2VuZGlmCi0KIAljaGVja2NwdSwKICNpZiBkZWZpbmVkKENPTkZJR19NUEM1eHh4KQogCXBydF9tcGM1eHh4X2Nsa3MsCkBAIC01NjgsNyArNTY0LDkgQEAKIAogCWJkLT5iaV9wcm9jZnJlcSA9IGdkLT5jcHVfY2xrOwkvKiBQcm9jZXNzb3IgU3BlZWQsIEluIEh6ICovCiAJYmQtPmJpX3BsYl9idXNmcmVxID0gZ2QtPmJ1c19jbGs7Ci0jaWYgZGVmaW5lZChDT05GSUdfNDA1R1ApIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpCisjaWYgZGVmaW5lZChDT05GSUdfNDA1R1ApIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCiAJYmQtPmJpX3BjaV9idXNmcmVxID0gZ2V0X1BDSV9mcmVxICgpOwogCWJkLT5iaV9vcGJmcmVxID0gZ2V0X09QQl9mcmVxICgpOwogI2VsaWYgZGVmaW5lZChDT05GSUdfWElMSU5YX01MMzAwKQpAQCAtODIyLDcgKzgyMCw3IEBACiAjZW5kaWYJLyogQ09ORklHXzQwNUdQLCBDT05GSUdfNDA1RVAgKi8KICNlbmRpZgkvKiBDRkdfRVhUQkRJTkZPICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TT0xJRENBUkQzKQorI2lmIGRlZmluZWQoQ09ORklHX1NDMykKIAlzYzNfcmVhZF9lZXByb20oKTsKICNlbmRpZgogCXMgPSBnZXRlbnYgKCJldGhhZGRyIik7CkBAIC05MzEsNyArOTI5LDcgQEAKICAgICBkZWZpbmVkKENPTkZJR19LVVA0WCkJfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0xXTU9OKQl8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfUENVX0UpCXx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19TT0xJRENBUkQzKQl8fCBcCisgICAgZGVmaW5lZChDT05GSUdfU0MzKQkJfHwgXAogICAgIGRlZmluZWQoQ09ORklHX1c3TykJCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19NSVNDX0lOSVRfUikKIAkvKiBtaXNjZWxsYW5lb3VzIHBsYXRmb3JtIGRlcGVuZGVudCBpbml0aWFsaXNhdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2xpYl9wcGMvZXh0YWJsZS5jIGIvbGliX3BwYy9leHRhYmxlLmMKaW5kZXggZmU4NTZmZi4uYjE0ZDY2MSAxMDA2NDQKLS0tIGEvbGliX3BwYy9leHRhYmxlLmMKKysrIGIvbGliX3BwYy9leHRhYmxlLmMKQEAgLTU3LDI1ICs1NywyNSBAQAogCQlsb25nIGRpZmY7CiAKIAkJbWlkID0gKGxhc3QgLSBmaXJzdCkgLyAyICsgZmlyc3Q7Ci0JCWlmIChtaWQgPiBDRkdfTU9OSVRPUl9CQVNFKSB7Ci0JCS8qIGV4Y2VwdGlvbiBvY2N1cnMgaW4gRkxBU0gsIGJlZm9yZSB1LWJvb3QgcmVsb2NhdGlvbi4KLQkJICogTm8gcmVsb2NhdGlvbiBvZmZzZXQgaXMgbmVlZGVkLgotCQkgKi8KKwkJaWYgKCh1bG9uZykgbWlkID4gQ0ZHX01PTklUT1JfQkFTRSkgeworCQkJLyogZXhjZXB0aW9uIG9jY3VycyBpbiBGTEFTSCwgYmVmb3JlIHUtYm9vdCByZWxvY2F0aW9uLgorCQkJICogTm8gcmVsb2NhdGlvbiBvZmZzZXQgaXMgbmVlZGVkLgorCQkJICovCiAJCQlkaWZmID0gbWlkLT5pbnNuIC0gdmFsdWU7CiAJCQlpZiAoZGlmZiA9PSAwKQogCQkJCXJldHVybiBtaWQtPmZpeHVwOwogCQl9IGVsc2UgewotCQkvKiBleGNlcHRpb24gb2NjdXJzIGluIFJBTSwgYWZ0ZXIgdS1ib290IHJlbG9jYXRpb24uCi0JCSAqIEEgcmVsb2NhdGlvbiBvZmZzZXQgc2hvdWxkIGJlIGFkZGVkLgotCQkgKi8KKwkJCS8qIGV4Y2VwdGlvbiBvY2N1cnMgaW4gUkFNLCBhZnRlciB1LWJvb3QgcmVsb2NhdGlvbi4KKwkJCSAqIEEgcmVsb2NhdGlvbiBvZmZzZXQgc2hvdWxkIGJlIGFkZGVkLgorCQkJICovCiAJCQlkaWZmID0gKG1pZC0+aW5zbiArIGdkLT5yZWxvY19vZmYpIC0gdmFsdWU7CiAJCQlpZiAoZGlmZiA9PSAwKQogCQkJCXJldHVybiAobWlkLT5maXh1cCArIGdkLT5yZWxvY19vZmYpOwogCQl9CiAJCWlmIChkaWZmIDwgMCkKLQkJCWZpcnN0ID0gbWlkKzE7CisJCQlmaXJzdCA9IG1pZCArIDE7CiAJCWVsc2UKLQkJCWxhc3QgPSBtaWQtMTsKKwkJCWxhc3QgPSBtaWQgLSAxOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25hbmRfc3BsL2JvYXJkL2FtY2MvYWNhZGlhL01ha2VmaWxlIGIvbmFuZF9zcGwvYm9hcmQvYW1jYy9hY2FkaWEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ2ODI4YQotLS0gL2Rldi9udWxsCisrKyBiL25hbmRfc3BsL2JvYXJkL2FtY2MvYWNhZGlhL01ha2VmaWxlCkBAIC0wLDAgKzEsMTA0IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNworIyBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaW5jbHVkZSAkKFRPUERJUikvbmFuZF9zcGwvYm9hcmQvJChCT0FSRERJUikvY29uZmlnLm1rCisKK0xEU0NSSVBUPSAkKFRPUERJUikvbmFuZF9zcGwvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworTERGTEFHUwk9IC1Cc3RhdGljIC1UICQoTERTQ1JJUFQpIC1UdGV4dCAkKFRFWFRfQkFTRSkgJChQTEFURk9STV9MREZMQUdTKQorQUZMQUdTCSs9IC1EQ09ORklHX05BTkRfU1BMCitDRkxBR1MJKz0gLURDT05GSUdfTkFORF9TUEwKKworU09CSlMJPSBzdGFydC5vIHJlc2V0dmVjLm8KK0NPQkpTCT0gZ3Bpby5vIG5hbmRfYm9vdC5vIG5hbmRfZWNjLm8gbWVtb3J5Lm8gbmRmYy5vCisKK1NSQ1MJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCitfX09CSlMJOj0gJChTT0JKUykgJChDT0JKUykKK0xORElSCTo9ICQoT0JKVFJFRSkvbmFuZF9zcGwvYm9hcmQvJChCT0FSRERJUikKKworbmFuZG9iagk6PSAkKE9CSlRSRUUpL25hbmRfc3BsLworCitBTEwJPSAkKG5hbmRvYmopdS1ib290LXNwbCAkKG5hbmRvYmopdS1ib290LXNwbC5iaW4gJChuYW5kb2JqKXUtYm9vdC1zcGwtMTZrLmJpbgorCithbGw6CSQob2JqKS5kZXBlbmQgJChBTEwpCisKKyQobmFuZG9iail1LWJvb3Qtc3BsLTE2ay5iaW46ICQobmFuZG9iail1LWJvb3Qtc3BsCisJJChPQkpDT1BZKSAke09CSkNGTEFHU30gLS1wYWQtdG89JChQQURfVE8pIC1PIGJpbmFyeSAkPCAkQAorCiskKG5hbmRvYmopdS1ib290LXNwbC5iaW46CSQobmFuZG9iail1LWJvb3Qtc3BsCisJJChPQkpDT1BZKSAke09CSkNGTEFHU30gLU8gYmluYXJ5ICQ8ICRACisKKyQobmFuZG9iail1LWJvb3Qtc3BsOgkkKE9CSlMpCisJY2QgJChMTkRJUikgJiYgJChMRCkgJChMREZMQUdTKSAkJFVOREVGX1NZTSAkKF9fT0JKUykgXAorCQktTWFwICQobmFuZG9iail1LWJvb3Qtc3BsLm1hcCBcCisJCS1vICQobmFuZG9iail1LWJvb3Qtc3BsCisKKyMgY3JlYXRlIHN5bWJvbGljIGxpbmtzIGZvciBjb21tb24gZmlsZXMKKworIyBmcm9tIGNwdSBkaXJlY3RvcnkKKyQob2JqKWdwaW8uYzoKKwlAcm0gLWYgJChvYmopZ3Bpby5jCisJbG4gLXMgJChTUkNUUkVFKS9jcHUvcHBjNHh4L2dwaW8uYyAkKG9iailncGlvLmMKKworJChvYmopbmRmYy5jOgorCUBybSAtZiAkKG9iailuZGZjLmMKKwlsbiAtcyAkKFNSQ1RSRUUpL2NwdS9wcGM0eHgvbmRmYy5jICQob2JqKW5kZmMuYworCiskKG9iailyZXNldHZlYy5TOgorCUBybSAtZiAkKG9iailyZXNldHZlYy5TCisJbG4gLXMgJChTUkNUUkVFKS9jcHUvcHBjNHh4L3Jlc2V0dmVjLlMgJChvYmopcmVzZXR2ZWMuUworCiskKG9iailzdGFydC5TOgorCUBybSAtZiAkKG9iailzdGFydC5TCisJbG4gLXMgJChTUkNUUkVFKS9jcHUvcHBjNHh4L3N0YXJ0LlMgJChvYmopc3RhcnQuUworCisjIGZyb20gYm9hcmQgZGlyZWN0b3J5CiskKG9iailtZW1vcnkuYzoKKwlAcm0gLWYgJChvYmopbWVtb3J5LmMKKwlsbiAtcyAkKFNSQ1RSRUUpL2JvYXJkL2FtY2MvYWNhZGlhL21lbW9yeS5jICQob2JqKW1lbW9yeS5jCisKKyMgZnJvbSBuYW5kX3NwbCBkaXJlY3RvcnkKKyQob2JqKW5hbmRfYm9vdC5jOgorCUBybSAtZiAkKG9iailuYW5kX2Jvb3QuYworCWxuIC1zICQoU1JDVFJFRSkvbmFuZF9zcGwvbmFuZF9ib290LmMgJChvYmopbmFuZF9ib290LmMKKworIyBmcm9tIGRyaXZlcnMvbmFuZCBkaXJlY3RvcnkKKyQob2JqKW5hbmRfZWNjLmM6CisJQHJtIC1mICQob2JqKW5hbmRfZWNjLmMKKwlsbiAtcyAkKFNSQ1RSRUUpL2RyaXZlcnMvbmFuZC9uYW5kX2VjYy5jICQob2JqKW5hbmRfZWNjLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiskKG9iaiklLm86CSQob2JqKSUuUworCSQoQ0MpICQoQUZMQUdTKSAtYyAtbyAkQCAkPAorCiskKG9iaiklLm86CSQob2JqKSUuYworCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkQCAkPAorCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL25hbmRfc3BsL2JvYXJkL2FtY2MvYWNhZGlhL2NvbmZpZy5tayBiL25hbmRfc3BsL2JvYXJkL2FtY2MvYWNhZGlhL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTA2OWI0Ci0tLSAvZGV2L251bGwKKysrIGIvbmFuZF9zcGwvYm9hcmQvYW1jYy9hY2FkaWEvY29uZmlnLm1rCkBAIC0wLDAgKzEsNDcgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA3CisjIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKyMKKyMgQU1DQyA0MDVFWiBSZWZlcmVuY2UgUGxhdGZvcm0gKEFjYWRpYSkgYm9hcmQKKyMKKworIworIyBURVhUX0JBU0UgZm9yIFNQTDoKKyMKKyMgT24gNHh4IHBsYXRmb3JtcyB0aGUgU1BMIGlzIGxvY2F0ZWQgYXQgMHhmZmZmZjAwMC4uLjB4ZmZmZmZmZmYsCisjIGluIHRoZSBsYXN0IDRrQnl0ZXMgb2YgbWVtb3J5IHNwYWNlIGluIGNhY2hlLgorIyBXZSB3aWxsIGNvcHkgdGhpcyBTUEwgaW50byBpbnRlcm5hbCBTUkFNIGluIHN0YXJ0LlMuIFNvIHdlIHNldAorIyBURVhUX0JBU0UgdG8gc3RhcnRpbmcgYWRkcmVzcyBpbiBpbnRlcm5hbCBTUkFNIGhlcmUuCisjCitURVhUX0JBU0UgPSAweEY4MDAzMDAwCisKKyMgUEFEX1RPIHVzZWQgdG8gZ2VuZXJhdGUgYSAxNmtCeXRlIGJpbmFyeSBuZWVkZWQgZm9yIHRoZSBjb21iaW5lZCBpbWFnZQorIyAtPiBQQURfVE8gPSBURVhUX0JBU0UgKyAweDQwMDAKK1BBRF9UTwk9IDB4RjgwMDcwMDAKKworaWZlcSAoJChkZWJ1ZyksMSkKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EREVCVUcKK2VuZGlmCisKK2lmZXEgKCQoZGJjciksMSkKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ0ZHX0lOSVRfREJDUj0weDhjZmYwMDAwCitlbmRpZgpkaWZmIC0tZ2l0IGEvbmFuZF9zcGwvYm9hcmQvYW1jYy9hY2FkaWEvdS1ib290LmxkcyBiL25hbmRfc3BsL2JvYXJkL2FtY2MvYWNhZGlhL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4ZGVmMQotLS0gL2Rldi9udWxsCisrKyBiL25hbmRfc3BsL2JvYXJkL2FtY2MvYWNhZGlhL3UtYm9vdC5sZHMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9BUkNIKHBvd2VycGM6Y29tbW9uKQorU0VDVElPTlMKK3sKKyAgLnJlc2V0dmVjIDB4RjgwMDNGRkMgOgorICB7CisgICAgKigucmVzZXR2ZWMpCisgIH0gPSAweGZmZmYKKworICAudGV4dCAgICAgIDoKKyAgeworICAgIHN0YXJ0Lm8JKC50ZXh0KQorICAgIG5hbmRfYm9vdC5vCSgudGV4dCkKKyAgICBuZGZjLm8JKC50ZXh0KQorCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgfQorICBfZXRleHQgPSAuOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLnJvZGF0YSopCisgICAgKiguZGF0YSopCisgICAgKiguc2RhdGEqKQorICAgIF9fZ290Ml9zdGFydCA9IC47CisgICAgKiguZ290MikKKyAgICBfX2dvdDJfZW5kID0gLjsKKyAgfQorCisgIF9lZGF0YSAgPSAgLjsKKworICBfX2Jzc19zdGFydCA9IC47CisgIC5ic3MgICAgICAgOgorICB7CisgICAqKC5zYnNzKQorICAgKiguYnNzKQorICB9CisKKyAgX2VuZCA9IC4gOworfQpkaWZmIC0tZ2l0IGEvbmFuZF9zcGwvYm9hcmQvYW1jYy9iYW1ib28vTWFrZWZpbGUgYi9uYW5kX3NwbC9ib2FyZC9hbWNjL2JhbWJvby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGY4NmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbmFuZF9zcGwvYm9hcmQvYW1jYy9iYW1ib28vTWFrZWZpbGUKQEAgLTAsMCArMSwxMDAgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA3CisjIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpbmNsdWRlICQoVE9QRElSKS9uYW5kX3NwbC9ib2FyZC8kKEJPQVJERElSKS9jb25maWcubWsKKworTERTQ1JJUFQ9ICQoVE9QRElSKS9uYW5kX3NwbC9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCitMREZMQUdTCT0gLUJzdGF0aWMgLVQgJChMRFNDUklQVCkgLVR0ZXh0ICQoVEVYVF9CQVNFKSAkKFBMQVRGT1JNX0xERkxBR1MpCitBRkxBR1MJKz0gLURDT05GSUdfTkFORF9TUEwKK0NGTEFHUwkrPSAtRENPTkZJR19OQU5EX1NQTAorCitTT0JKUwk9IHN0YXJ0Lm8gaW5pdC5vIHJlc2V0dmVjLm8KK0NPQkpTCT0gbmFuZF9ib290Lm8gbmFuZF9lY2MubyBuZGZjLm8gc2RyYW0ubworCitTUkNTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKSkKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorX19PQkpTCTo9ICQoU09CSlMpICQoQ09CSlMpCitMTkRJUgk6PSAkKE9CSlRSRUUpL25hbmRfc3BsL2JvYXJkLyQoQk9BUkRESVIpCisKK25hbmRvYmoJOj0gJChPQkpUUkVFKS9uYW5kX3NwbC8KKworQUxMCT0gJChuYW5kb2JqKXUtYm9vdC1zcGwgJChuYW5kb2JqKXUtYm9vdC1zcGwuYmluICQobmFuZG9iail1LWJvb3Qtc3BsLTE2ay5iaW4KKworYWxsOgkkKG9iaikuZGVwZW5kICQoQUxMKQorCiskKG5hbmRvYmopdS1ib290LXNwbC0xNmsuYmluOiAkKG5hbmRvYmopdS1ib290LXNwbAorCSQoT0JKQ09QWSkgJHtPQkpDRkxBR1N9IC0tcGFkLXRvPSQoUEFEX1RPKSAtTyBiaW5hcnkgJDwgJEAKKworJChuYW5kb2JqKXUtYm9vdC1zcGwuYmluOgkkKG5hbmRvYmopdS1ib290LXNwbAorCSQoT0JKQ09QWSkgJHtPQkpDRkxBR1N9IC1PIGJpbmFyeSAkPCAkQAorCiskKG5hbmRvYmopdS1ib290LXNwbDoJJChPQkpTKQorCWNkICQoTE5ESVIpICYmICQoTEQpICQoTERGTEFHUykgJCRVTkRFRl9TWU0gJChfX09CSlMpIFwKKwkJLU1hcCAkKG5hbmRvYmopdS1ib290LXNwbC5tYXAgXAorCQktbyAkKG5hbmRvYmopdS1ib290LXNwbAorCisjIGNyZWF0ZSBzeW1ib2xpYyBsaW5rcyBmb3IgY29tbW9uIGZpbGVzCisKKyMgZnJvbSBjcHUgZGlyZWN0b3J5CiskKG9iailuZGZjLmM6CisJQHJtIC1mICQob2JqKW5kZmMuYworCWxuIC1zICQoU1JDVFJFRSkvY3B1L3BwYzR4eC9uZGZjLmMgJChvYmopbmRmYy5jCisKKyQob2JqKXJlc2V0dmVjLlM6CisJQHJtIC1mICQob2JqKXJlc2V0dmVjLlMKKwlsbiAtcyAkKFNSQ1RSRUUpL2NwdS9wcGM0eHgvcmVzZXR2ZWMuUyAkKG9iailyZXNldHZlYy5TCisKKyQob2JqKXN0YXJ0LlM6CisJQHJtIC1mICQob2JqKXN0YXJ0LlMKKwlsbiAtcyAkKFNSQ1RSRUUpL2NwdS9wcGM0eHgvc3RhcnQuUyAkKG9iailzdGFydC5TCisKKyMgZnJvbSBib2FyZCBkaXJlY3RvcnkKKyQob2JqKWluaXQuUzoKKwlAcm0gLWYgJChvYmopaW5pdC5TCisJbG4gLXMgJChTUkNUUkVFKS9ib2FyZC9hbWNjL2JhbWJvby9pbml0LlMgJChvYmopaW5pdC5TCisKKyMgZnJvbSBuYW5kX3NwbCBkaXJlY3RvcnkKKyQob2JqKW5hbmRfYm9vdC5jOgorCUBybSAtZiAkKG9iailuYW5kX2Jvb3QuYworCWxuIC1zICQoU1JDVFJFRSkvbmFuZF9zcGwvbmFuZF9ib290LmMgJChvYmopbmFuZF9ib290LmMKKworIyBmcm9tIGRyaXZlcnMvbmFuZCBkaXJlY3RvcnkKKyQob2JqKW5hbmRfZWNjLmM6CisJQHJtIC1mICQob2JqKW5hbmRfZWNjLmMKKwlsbiAtcyAkKFNSQ1RSRUUpL2RyaXZlcnMvbmFuZC9uYW5kX2VjYy5jICQob2JqKW5hbmRfZWNjLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiskKG9iaiklLm86CSQob2JqKSUuUworCSQoQ0MpICQoQUZMQUdTKSAtYyAtbyAkQCAkPAorCiskKG9iaiklLm86CSQob2JqKSUuYworCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkQCAkPAorCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL25hbmRfc3BsL2JvYXJkL2FtY2MvYmFtYm9vL2NvbmZpZy5tayBiL25hbmRfc3BsL2JvYXJkL2FtY2MvYmFtYm9vL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2VjNzUxCi0tLSAvZGV2L251bGwKKysrIGIvbmFuZF9zcGwvYm9hcmQvYW1jYy9iYW1ib28vY29uZmlnLm1rCkBAIC0wLDAgKzEsNDkgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA3CisjIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKyMKKyMgQU1DQyA0NDBFUCBSZWZlcmVuY2UgUGxhdGZvcm0gKEJhbWJvbykgYm9hcmQKKyMKKworIworIyBURVhUX0JBU0UgZm9yIFNQTDoKKyMKKyMgT24gNDQwRVAoeCkgcGxhdGZvcm1zIHRoZSBTUEwgaXMgbG9jYXRlZCBhdCAweGZmZmZmMDAwLi4uMHhmZmZmZmZmZiwKKyMgaW4gdGhlIGxhc3QgNGtCeXRlcyBvZiBtZW1vcnkgc3BhY2UgaW4gY2FjaGUuCisjIFdlIHdpbGwgY29weSB0aGlzIFNQTCBpbnRvIGluc3RydWN0aW9uLWNhY2hlIGluIHN0YXJ0LlMuIFNvIHdlIHNldAorIyBURVhUX0JBU0UgdG8gc3RhcnRpbmcgYWRkcmVzcyBpbiBpLWNhY2hlIGhlcmUuCisjCitURVhUX0JBU0UgPSAweDAwODAwMDAwCisKKyMgUEFEX1RPIHVzZWQgdG8gZ2VuZXJhdGUgYSAxNmtCeXRlIGJpbmFyeSBuZWVkZWQgZm9yIHRoZSBjb21iaW5lZCBpbWFnZQorIyAtPiBQQURfVE8gPSBURVhUX0JBU0UgKyAweDQwMDAKK1BBRF9UTwk9IDB4MDA4MDQwMDAKKworUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfNDQwPTEKKworaWZlcSAoJChkZWJ1ZyksMSkKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EREVCVUcKK2VuZGlmCisKK2lmZXEgKCQoZGJjciksMSkKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ0ZHX0lOSVRfREJDUj0weDhjZmYwMDAwCitlbmRpZgpkaWZmIC0tZ2l0IGEvbmFuZF9zcGwvYm9hcmQvYW1jYy9iYW1ib28vc2RyYW0uYyBiL25hbmRfc3BsL2JvYXJkL2FtY2MvYmFtYm9vL3NkcmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwOTA3MgotLS0gL2Rldi9udWxsCisrKyBiL25hbmRfc3BsL2JvYXJkL2FtY2MvYmFtYm9vL3NkcmFtLmMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxwcGM0eHguaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyB2b2lkIHdhaXRfaW5pdF9jb21wbGV0ZSh2b2lkKQoreworCXUzMiB2YWw7CisKKwlkbyB7CisJCW1mc2RyYW0obWVtX21jc3RzLCB2YWwpOworCX0gd2hpbGUgKCEodmFsICYgMHg4MDAwMDAwMCkpOworfQorCisvKgorICogZWFybHlfc2RyYW1faW5pdCgpCisgKgorICogQXMgdGhlIG5hbWUgYWxyZWFkeSBpbmRpY2F0ZXMsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHZlcnkgZWFybHkKKyAqIGZyb20gc3RhcnQuUyBhbmQgY29uZmlndXJlcyB0aGUgU0RSQU0gd2l0aCBmaXhlZCB2YWx1ZXMuIFRoaXMgaXMgbmVlZGVkLAorICogc2luY2UgdGhlIDQ0MEVQIGhhcyBubyBpbnRlcm5hbCBTUkFNIGFuZCB0aGUgNGtCIE5BTkRfU1BMIGxvYWRlciBoYXMKKyAqIG5vdCBlbm91Z2ggZnJlZSBzcGFjZSB0byBpbXBsZW1lbnQgdGhlIGNvbXBsZXRlIEkyQyBTUEQgRERSIGF1dG9kZXRlY3Rpb24KKyAqIHJvdXRpbmVzLiBUaGVyZWZvcmUgdGhlIEJhbWJvbyBvbmx5IHN1cHBvcnRzIHRoZSBvbmJvYXJkIDY0TUJ5dGVzIG9mIFNEUkFNCisgKiB3aGVuIGJvb3RpbmcgZnJvbSBOQU5EIGZsYXNoLgorICovCit2b2lkIGVhcmx5X3NkcmFtX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIFNvZnQtcmVzZXQgU0RSQU0gY29udHJvbGxlci4KKwkgKi8KKwltdHNkcihzZHJfc3JzdCwgU0RSMF9TUlNUX0RNQyk7CisJbXRzZHIoc2RyX3Nyc3QsIDB4MDAwMDAwMDApOworCisJLyoKKwkgKiBEaXNhYmxlIG1lbW9yeSBjb250cm9sbGVyLgorCSAqLworCW10c2RyYW0obWVtX2NmZzAsIDB4MDAwMDAwMDApOworCisJLyoKKwkgKiBTZXR1cCBzb21lIGRlZmF1bHQKKwkgKi8KKwltdHNkcmFtKG1lbV91YWJiYSwgMHgwMDAwMDAwMCk7IC8qIHViYmE9MCAoZGVmYXVsdCkJCSovCisJbXRzZHJhbShtZW1fc2xpbywgMHgwMDAwMDAwMCk7CS8qIHJkcmU9MCB3cnJlPTAgcmFydz0wCQkqLworCW10c2RyYW0obWVtX2Rldm9wdCwgMHgwMDAwMDAwMCk7IC8qIGRsbD0wIGRzPTAgKG5vcm1hbCkJCSovCisJbXRzZHJhbShtZW1fd2RkY3RyLCAweDAwMDAwMDAwKTsgLyogd3JjcD0wIGRjZD0wCQkqLworCW10c2RyYW0obWVtX2Nsa3RyLCAweDQwMDAwMDAwKTsgLyogY2xrcD0xICg5MCBkZWcgd3IpIGRjZHQ9MAkqLworCisJLyoKKwkgKiBGb2xsb3dpbmcgZm9yIENBUyBMYXRlbmN5ID0gMi41IEAgMTMzIE1IeiBQTEIKKwkgKi8KKwltdHNkcmFtKG1lbV9iMGNyLCAweDAwMDgyMDAxKTsKKwltdHNkcmFtKG1lbV90cjAsIDB4NDEwOTQwMTIpOworCW10c2RyYW0obWVtX3RyMSwgMHg4MDgwMDgzZCk7CS8qIFNTPVQyIFNMPVNUQUdFIDMgQ0Q9MSBDVD0weDAwKi8KKwltdHNkcmFtKG1lbV9ydHIsIDB4MDQxMDAwMDApOwkvKiBJbnRlcnZhbCA3Lji1cyBAIDEzM01IeiBQTEIJKi8KKwltdHNkcmFtKG1lbV9jZmcxLCAweDAwMDAwMDAwKTsJLyogU2VsZi1yZWZyZXNoIGV4aXQsIGRpc2FibGUgUE0qLworCisJLyoKKwkgKiBFbmFibGUgdGhlIGNvbnRyb2xsZXIsIHRoZW4gd2FpdCBmb3IgRENFTiB0byBjb21wbGV0ZQorCSAqLworCW10c2RyYW0obWVtX2NmZzAsIDB4ODAwMDAwMDApOyAvKiBEQ0VOPTEsIFBNVUQ9MCovCisJd2FpdF9pbml0X2NvbXBsZXRlKCk7Cit9CisKK2xvbmcgaW50IGluaXRkcmFtKGludCBib2FyZF90eXBlKQoreworCS8qCisJICogTm90aGluZyB0byBkbyBoZXJlLCBqdXN0IHJldHVybiBzaXplIG9mIGZpeGVkIFNEUkFNIHNldHVwCisJICovCisJcmV0dXJuIENGR19NQllURVNfU0RSQU0gPDwgMjA7Cit9CmRpZmYgLS1naXQgYS9uYW5kX3NwbC9ib2FyZC9hbWNjL2JhbWJvby91LWJvb3QubGRzIGIvbmFuZF9zcGwvYm9hcmQvYW1jYy9iYW1ib28vdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODIyOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvbmFuZF9zcGwvYm9hcmQvYW1jYy9iYW1ib28vdS1ib290LmxkcwpAQCAtMCwwICsxLDY1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA3CisgKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0FSQ0gocG93ZXJwYzpjb21tb24pCitTRUNUSU9OUworeworICAucmVzZXR2ZWMgMHgwMDgwMEZGQyA6CisgIHsKKyAgICAqKC5yZXNldHZlYykKKyAgfSA9IDB4ZmZmZgorCisgIC50ZXh0ICAgICAgOgorICB7CisgICAgc3RhcnQubwkoLnRleHQpCisgICAgaW5pdC5vCSgudGV4dCkKKyAgICBuYW5kX2Jvb3QubwkoLnRleHQpCisgICAgc2RyYW0ubwkoLnRleHQpCisgICAgbmRmYy5vCSgudGV4dCkKKworICAgICooLnRleHQpCisgICAgKiguZml4dXApCisgIH0KKyAgX2V0ZXh0ID0gLjsKKworICAuZGF0YSAgICA6CisgIHsKKyAgICAqKC5yb2RhdGEqKQorICAgICooLmRhdGEqKQorICAgICooLnNkYXRhKikKKyAgICBfX2dvdDJfc3RhcnQgPSAuOworICAgICooLmdvdDIpCisgICAgX19nb3QyX2VuZCA9IC47CisgIH0KKworICBfZWRhdGEgID0gIC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykKKyAgICooLmJzcykKKyAgfQorCisgIF9lbmQgPSAuIDsKK30KZGlmZiAtLWdpdCBhL25hbmRfc3BsL2JvYXJkL2FtY2Mvc2VxdW9pYS9NYWtlZmlsZSBiL25hbmRfc3BsL2JvYXJkL2FtY2Mvc2VxdW9pYS9NYWtlZmlsZQppbmRleCA1MTA5OTlkLi5lYzFiZTVhIDEwMDY0NAotLS0gYS9uYW5kX3NwbC9ib2FyZC9hbWNjL3NlcXVvaWEvTWFrZWZpbGUKKysrIGIvbmFuZF9zcGwvYm9hcmQvYW1jYy9zZXF1b2lhL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgKEMpIENvcHlyaWdodCAyMDA2LTIwMDcKICMgU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMzAsNyArMzAsNyBAQAogQ0ZMQUdTCSs9IC1EQ09ORklHX05BTkRfU1BMCiAKIFNPQkpTCT0gc3RhcnQubyBpbml0Lm8gcmVzZXR2ZWMubwotQ09CSlMJPSBuYW5kX2Jvb3QubyBuZGZjLm8gc2RyYW0ubyBzcGVlZC5vCitDT0JKUwk9IG5hbmRfYm9vdC5vIG5hbmRfZWNjLm8gbmRmYy5vIHNkcmFtLm8KIAogU1JDUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykpCiBPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKQEAgLTY5LDEwICs2OSw2IEBACiAJQHJtIC1mICQob2JqKXN0YXJ0LlMKIAlsbiAtcyAkKFNSQ1RSRUUpL2NwdS9wcGM0eHgvc3RhcnQuUyAkKG9iailzdGFydC5TCiAKLSQob2JqKXNwZWVkLmM6Ci0JQHJtIC1mICQob2JqKXNwZWVkLmMKLQlsbiAtcyAkKFNSQ1RSRUUpL2NwdS9wcGM0eHgvc3BlZWQuYyAkKG9iailzcGVlZC5jCi0KICMgZnJvbSBib2FyZCBkaXJlY3RvcnkKICQob2JqKWluaXQuUzoKIAlAcm0gLWYgJChvYmopaW5pdC5TCkBAIC04OSw2ICs4NSwxMSBAQAogCUBybSAtZiAkKG9iailuYW5kX2Jvb3QuYwogCWxuIC1zICQoU1JDVFJFRSkvbmFuZF9zcGwvbmFuZF9ib290LmMgJChvYmopbmFuZF9ib290LmMKIAorIyBmcm9tIGRyaXZlcnMvbmFuZCBkaXJlY3RvcnkKKyQob2JqKW5hbmRfZWNjLmM6CisJQHJtIC1mICQob2JqKW5hbmRfZWNjLmMKKwlsbiAtcyAkKFNSQ1RSRUUpL2RyaXZlcnMvbmFuZC9uYW5kX2VjYy5jICQob2JqKW5hbmRfZWNjLmMKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAkKG9iaiklLm86CSQob2JqKSUuUwpkaWZmIC0tZ2l0IGEvbmFuZF9zcGwvbmFuZF9ib290LmMgYi9uYW5kX3NwbC9uYW5kX2Jvb3QuYwppbmRleCBhMTM2ZmI3Li44NDBhNTk2IDEwMDY0NAotLS0gYS9uYW5kX3NwbC9uYW5kX2Jvb3QuYworKysgYi9uYW5kX3NwbC9uYW5kX2Jvb3QuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIChDKSBDb3B5cmlnaHQgMjAwNi0yMDA3CiAgKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQsMjcgKzI0LDI4IEBACiAjZGVmaW5lIENGR19OQU5EX1JFQURfREVMQVkgXAogCXsgdm9sYXRpbGUgaW50IGR1bW15OyBpbnQgaTsgZm9yIChpPTA7IGk8MTAwMDA7IGkrKykgZHVtbXkgPSBpOyB9CiAKK3N0YXRpYyBpbnQgbmFuZF9lY2NfcG9zW10gPSBDRkdfTkFORF9FQ0NQT1M7CisKIGV4dGVybiB2b2lkIGJvYXJkX25hbmRfaW5pdChzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kKTsKLWV4dGVybiB2b2lkIG5kZmNfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkaW5mbywgaW50IGNtZCk7Ci1leHRlcm4gdm9pZCBuZGZjX3dyaXRlX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGRpbmZvLCB1X2NoYXIgYnl0ZSk7Ci1leHRlcm4gdV9jaGFyIG5kZmNfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkaW5mbyk7Ci1leHRlcm4gaW50IG5kZmNfZGV2X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkaW5mbyk7Ci1leHRlcm4gaW50IGp1bXBfdG9fcmFtKHVsb25nIGRlbHRhKTsKLWV4dGVybiBpbnQganVtcF90b191Ym9vdCh1bG9uZyBhZGRyKTsKIAotc3RhdGljIGludCBuYW5kX2lzX2JhZF9ibG9jayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGJsb2NrKQorc3RhdGljIGludCBuYW5kX2NvbW1hbmQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBibG9jaywgaW50IHBhZ2UsIGludCBvZmZzLCB1OCBjbWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgcGFnZV9hZGRyID0gYmxvY2sgKiBDRkdfTkFORF9QQUdFX0NPVU5UOworCWludCBwYWdlX2FkZHIgPSBwYWdlICsgYmxvY2sgKiBDRkdfTkFORF9QQUdFX0NPVU5UOworCisJaWYgKHRoaXMtPmRldl9yZWFkeSkKKwkJdGhpcy0+ZGV2X3JlYWR5KG10ZCk7CisJZWxzZQorCQlDRkdfTkFORF9SRUFEX0RFTEFZOwogCiAJLyogQmVnaW4gY29tbWFuZCBsYXRjaCBjeWNsZSAqLwogCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7Ci0JdGhpcy0+d3JpdGVfYnl0ZShtdGQsIE5BTkRfQ01EX1JFQURPT0IpOworCXRoaXMtPndyaXRlX2J5dGUobXRkLCBjbWQpOwogCS8qIFNldCBBTEUgYW5kIGNsZWFyIENMRSB0byBzdGFydCBhZGRyZXNzIGN5Y2xlICovCiAJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKIAl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRBTEUpOwogCS8qIENvbHVtbiBhZGRyZXNzICovCi0JdGhpcy0+d3JpdGVfYnl0ZShtdGQsIENGR19OQU5EX0JBRF9CTE9DS19QT1MpOwkJCS8qIEFbNzowXSAqLworCXRoaXMtPndyaXRlX2J5dGUobXRkLCBvZmZzKTsJCQkJCS8qIEFbNzowXSAqLwogCXRoaXMtPndyaXRlX2J5dGUobXRkLCAodWNoYXIpKHBhZ2VfYWRkciAmIDB4ZmYpKTsJCS8qIEFbMTY6OV0gKi8KIAl0aGlzLT53cml0ZV9ieXRlKG10ZCwgKHVjaGFyKSgocGFnZV9hZGRyID4+IDgpICYgMHhmZikpOwkvKiBBWzI0OjE3XSAqLwogI2lmZGVmIENGR19OQU5EXzRfQUREUl9DWUNMRQpAQCAtNjIsNiArNjMsMTUgQEAKIAllbHNlCiAJCUNGR19OQU5EX1JFQURfREVMQVk7CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuYW5kX2lzX2JhZF9ibG9jayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGJsb2NrKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwluYW5kX2NvbW1hbmQobXRkLCBibG9jaywgMCwgQ0ZHX05BTkRfQkFEX0JMT0NLX1BPUywgTkFORF9DTURfUkVBRE9PQik7CisKIAkvKgogCSAqIFJlYWQgb24gYnl0ZQogCSAqLwpAQCAtNzQsMzkgKzg0LDQ2IEBACiBzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYmxvY2ssIGludCBwYWdlLCB1Y2hhciAqZHN0KQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50IHBhZ2VfYWRkciA9IHBhZ2UgKyBibG9jayAqIENGR19OQU5EX1BBR0VfQ09VTlQ7CisJdV9jaGFyICplY2NfY2FsYzsKKwl1X2NoYXIgKmVjY19jb2RlOworCXVfY2hhciAqb29iX2RhdGE7CiAJaW50IGk7CisJaW50IGVjY3NpemUgPSBDRkdfTkFORF9FQ0NTSVpFOworCWludCBlY2NieXRlcyA9IENGR19OQU5EX0VDQ0JZVEVTOworCWludCBlY2NzdGVwcyA9IENGR19OQU5EX0VDQ1NURVBTOworCXVpbnQ4X3QgKnAgPSBkc3Q7CisJaW50IHN0YXQ7CiAKLQkvKiBCZWdpbiBjb21tYW5kIGxhdGNoIGN5Y2xlICovCi0JdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQ0xFKTsKLQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgTkFORF9DTURfUkVBRDApOwotCS8qIFNldCBBTEUgYW5kIGNsZWFyIENMRSB0byBzdGFydCBhZGRyZXNzIGN5Y2xlICovCi0JdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKLQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRBTEUpOwotCS8qIENvbHVtbiBhZGRyZXNzICovCi0JdGhpcy0+d3JpdGVfYnl0ZShtdGQsIDApOwkJCQkJLyogQVs3OjBdICovCi0JdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1Y2hhcikocGFnZV9hZGRyICYgMHhmZikpOwkJLyogQVsxNjo5XSAqLwotCXRoaXMtPndyaXRlX2J5dGUobXRkLCAodWNoYXIpKChwYWdlX2FkZHIgPj4gOCkgJiAweGZmKSk7CS8qIEFbMjQ6MTddICovCi0jaWZkZWYgQ0ZHX05BTkRfNF9BRERSX0NZQ0xFCi0JLyogT25lIG1vcmUgYWRkcmVzcyBjeWNsZSBmb3IgZGV2aWNlcyA+IDMyTWlCICovCi0JdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1Y2hhcikoKHBhZ2VfYWRkciA+PiAxNikgJiAweDBmKSk7CS8qIEFbeHg6MjVdICovCi0jZW5kaWYKLQkvKiBMYXRjaCBpbiBhZGRyZXNzICovCi0JdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQUxFKTsKKwluYW5kX2NvbW1hbmQobXRkLCBibG9jaywgcGFnZSwgMCwgTkFORF9DTURfUkVBRDApOwogCi0JLyoKLQkgKiBXYWl0IGEgd2hpbGUgZm9yIHRoZSBkYXRhIHRvIGJlIHJlYWR5CisJLyogTm8gbWFsbG9jIGF2YWlsYWJsZSBmb3Igbm93LCBqdXN0IHVzZSBzb21lIHRlbXBvcmFyeSBsb2NhdGlvbnMKKwkgKiBpbiBTRFJBTQogCSAqLwotCWlmICh0aGlzLT5kZXZfcmVhZHkpCi0JCXRoaXMtPmRldl9yZWFkeShtdGQpOwotCWVsc2UKLQkJQ0ZHX05BTkRfUkVBRF9ERUxBWTsKKwllY2NfY2FsYyA9ICh1X2NoYXIgKikoQ0ZHX1NEUkFNX0JBU0UgKyAweDEwMDAwKTsKKwllY2NfY29kZSA9IGVjY19jYWxjICsgMHgxMDA7CisJb29iX2RhdGEgPSBlY2NfY2FsYyArIDB4MjAwOwogCi0JLyoKLQkgKiBSZWFkIHBhZ2UgaW50byBidWZmZXIKLQkgKi8KLQlmb3IgKGk9MDsgaTxDRkdfTkFORF9QQUdFX1NJWkU7IGkrKykKLQkJKmRzdCsrID0gdGhpcy0+cmVhZF9ieXRlKG10ZCk7CisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgeworCQl0aGlzLT5lbmFibGVfaHdlY2MobXRkLCBOQU5EX0VDQ19SRUFEKTsKKwkJdGhpcy0+cmVhZF9idWYobXRkLCBwLCBlY2NzaXplKTsKKwkJdGhpcy0+Y2FsY3VsYXRlX2VjYyhtdGQsIHAsICZlY2NfY2FsY1tpXSk7CisJfQorCXRoaXMtPnJlYWRfYnVmKG10ZCwgb29iX2RhdGEsIENGR19OQU5EX09PQlNJWkUpOworCisJLyogUGljayB0aGUgRUNDIGJ5dGVzIG91dCBvZiB0aGUgb29iIGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX05BTkRfRUNDVE9UQUw7IGkrKykKKwkJZWNjX2NvZGVbaV0gPSBvb2JfZGF0YVtuYW5kX2VjY19wb3NbaV1dOworCisJZWNjc3RlcHMgPSBDRkdfTkFORF9FQ0NTVEVQUzsKKwlwID0gZHN0OworCisJZm9yIChpID0gMCA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKKwkJLyogTm8gY2hhbmNlIHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBwb3NzaWJsZSBlcnJvciBtZXNzYWdlCisJCSAqIGZyb20gY29ycmVjdF9kYXRhKCkuIFdlIGp1c3QgaG9wZSB0aGF0IGFsbCBwb3NzaWJsZSBlcnJvcnMKKwkJICogYXJlIGNvcnJlY3RlZCBieSB0aGlzIHJvdXRpbmUuCisJCSAqLworCQlzdGF0ID0gdGhpcy0+Y29ycmVjdF9kYXRhKG10ZCwgcCwgJmVjY19jb2RlW2ldLCAmZWNjX2NhbGNbaV0pOworCX0KIAogCXJldHVybiAwOwogfQo=